我正在使用VBA宏做类似的事情
Sub test()
For Each X In Workbooks("file.xlsx").Sheets("sheetname")
Do something
Next
End Sub
我正在执行此宏的工作表是不 for-each循环中的工作表。我还通过工作表中的按钮运行此宏。
但是,99%的时间执行此宏的文件名和位置将不同。因此,我希望在执行此宏时有可能出现“打开文件”对话框,我选择一个文件,然后在该宏中使用该文件。
我也想让它像这样:
Dim worksheetname as variable
For Each X in worksheetname.sheets("sheetname")
而不是直接在行中,因为它比直接在代码中更好。
然而,即使使用硬编码的文件名,我也没能正确地执行此操作(不知道要将其调暗为什么,以及如何将其设置为文件名),如果您伙计们也可以帮助我(与通过文件对话框一起制作),这会很棒。
谢谢!
XEB
答案 0 :(得分:2)
尝试这样的事情,我将其称为带有args的函数,用于文件类型过滤器和(可选)默认目录,它将打开:
Sub g()
FilePath = FileSelectBox("*.xlsx")
Msgbox "Filepath = " & FilePath
End Sub
Function FileSelectBox(ByRef FileType As String, Optional ByVal DefaultDir As String) As String
Dim a As Object, FileName As String, varFile As Variant
Set a = Application.FileDialog(msoFileDialogFilePicker)
With a
.AllowMultiSelect = False
.Title = "Select File..."
.Filters.Clear
.Filters.Add "Excel Files", FileType
If Not IsMissing(DefaultDir) And DefaultDir <> "" Then .InitialFileName = DefaultDir
If .Show = True Then
For Each varFile In .SelectedItems
FileSelectBox = varFile
Next varFile
End If
End With
End Function
MSISDN:https://msdn.microsoft.com/en-us/library/office/ff196794.aspx