Excel vba用户选择工作簿,然后复制数据

Excel vba用户选择工作簿,然后复制数据,vba,excel,copy-paste,Vba,Excel,Copy Paste,我有一个宏,它可以将csv文件中的数据复制到excel文件中,如果每次文件名都相同,效果会很好。这就是问题所在:它不是每次都用同一个名字 我需要脚本允许用户选择csv文件。然后,修改代码以允许其复制。这就是我所拥有的: Sub importmix() Worksheets("mixdata").Range("A1:P300").Clear '## Open workbooks first: Set X = Workbooks.Open("C:\test\mix.csv

我有一个宏,它可以将csv文件中的数据复制到excel文件中,如果每次文件名都相同,效果会很好。这就是问题所在:它不是每次都用同一个名字

我需要脚本允许用户选择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

应能够使用:

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

我想你正在寻找这样的东西:

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会解决这个问题