我遇到了麻烦,希望是小问题,我似乎无法弄清楚如何解决它。
我有一个vba脚本,可以很好地将多个工作簿/工作表合并为1.但是,文件夹的路径是静态路径。我想把它变成一个可以由filedialog函数定义的变量。
以下是文件合并的现有代码:
Sub ProjectMerger()
Dim bookList As Workbook
Dim mergeObj As Object, dirObj As Object, filesObj As Object, everyObj As Object
Application.ScreenUpdating = False
Set mergeObj = CreateObject("Scripting.FileSystemObject")
'change folder path of excel files here
Set dirObj = mergeObj.GetFolder("C:\Users\testUser\Desktop\FolderTest")
Set filesObj = dirObj.Files
For Each everyObj In filesObj
Set bookList = Workbooks.Open(everyObj)
以下是使用filedialog的脚本:
Function GetFolder() As String
Dim fldr As FileDialog
Dim sItem As String
Set fldr = Application.FileDialog(msoFileDialogFolderPicker)
With fldr
.Title = "Select a Folder"
.AllowMultiSelect = False
.InitialFileName = Application.DefaultFilePath
If .Show <> -1 Then GoTo NextCode
sItem = .SelectedItems(1)
End With
NextCode:
GetFolder = sItem
Set fldr = Nothing
End Function
我认为用sItem替换文件夹路径字符串以使其正常工作会很容易,但这样做总会导致错误。我是否必须将sItem指定为其他东西才能将其用作路径?我不太熟悉函数的工作方式与常规潜艇的关系。
答案 0 :(得分:2)
您只需要捕获从函数&amp;中返回的选定路径。如果用户取消了对话框,则处理它为空的可能性,例如
Dim path As String
path = GetFolder()
If (path <> "") Then
Set dirObj = mergeObj.GetFolder(path)
....
....
Else
'// user cancelled
End If