2017-09-05 81 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 
相关问题