2017-09-05 2 views
1

データをcsvファイルからExcelファイルにコピーするマクロがあり、ファイル名が毎回同じ場合はうまく機能します。それはどこに問題があるのか​​です:毎回同じ名前ではありません。Excel vbaユーザーがワークブックを選択してデータをコピーする

ユーザーがcsvファイルを選択できるようにするにはスクリプトが必要です。次に、それをコピーできるようにするコード。これは私が持っているものです。

Sub importmix() 

    Worksheets("mixdata").Range("A1:P300").Clear 

    '## Open workbooks first: 
    Set X = Workbooks.Open("C:\test\mix.csv") 
    '## Set values between workbooks 
    Workbooks("2.xlsm").Worksheets("mixdata").Range("A1:K300").Value = _ 
     Workbooks("mix.csv").Worksheets("mix").Range("C1:M300").Value 

    '##Close x: 
    X.Close False 
End Sub 

答えて

1

私はあなたがこのような何かを探していると思う:

Sub test() 
    Dim intResult As Integer 
    Dim fD As FileDialog 

    Set fD = Application.FileDialog(msoFileDialogFilePicker) 

    With fD 
     .Title = "Select a Path" 
     .AllowMultiSelect = False 
     .Show 
    End With 

    importmix fD.SelectedItems(1) 

End Sub 

Sub importmix(path As String) 

    Worksheets("mixdata").Range("A1:P300").Clear 

    '## Open workbooks first: 
    Set X = Workbooks.Open(path) 
    '## Set values between workbooks 
    Workbooks("2.xlsm").Worksheets("mixdata").Range("A1:K300").Value = _ 
     Workbooks(Dir(path)).Worksheets(Dir(Replace(UCase(path), ".csv", ""))).Range("C1:M300").Value 

    '##Close x: 
    X.Close False 

End Sub 

Dir(path)はあなたのファイル名を与えます。 csvは拡張子のないファイル名のシートを自動的に開きます。したがって、.csvを削除するとそれが処理されます。

+0

は魅力的な作品です。 – darka

+0

@ user2754055ようこそ:-) – GibralterTop

0

は使用することができるはずです:

Dim intResult as integer 
'Dialogue box name 
Application.FileDialog(msoFileDialogFolderPicker).Title = "Select a Path" 
'The dialog is displayed to the user 
intResult = Application.FileDialog(msoFileDialogFolderPicker).Show 
関連する問題