我在Excel中使用VBA循环浏览一系列文件并决定导入哪些文件。我想决定使用文件标签之类的东西导入哪些文件,这样我就不需要打开每个文件了。我正在尝试使用 GetDetailsOf
获取它们的方法,但每当我尝试使用变量作为文件名时它就失败了。
此代码使用常量作为文件名,可正常工作:
Sub TestTags()
Dim strPath As String
Dim strFile As String
strPath = "C:\Users\XXXX\Documents\Safe Space\MacroTest\"
strFile = Dir(strPath & "*.xls*")
Do While strFile <> ""
Debug.Print GetTags()
strFile = Dir()
Loop
End Sub
Function GetTags()
Const csFile As String = "MyTestFile.xlsx"
With CreateObject("Shell.Application").Namespace("C:\Users\XXXX\Documents\Safe Space\MacroTest\")
GetTags = .GetDetailsOf(.Items.Item(csFile), 18)
End With
End Function
但是,当我尝试用调用子例程传递的变量替换常量时,我得到一个错误。这是失败的代码:
Sub TestTags()
Dim strPath As String
Dim strFile As String
strPath = "C:\Users\XXXX\Documents\Safe Space\MacroTest\"
strFile = Dir(strPath & "*.xls*")
Do While strFile <> ""
Debug.Print GetTags(strFile)
strFile = Dir()
Loop
End Sub
Function GetTags(ByVal strFile As String)
Const csFile As String = "MyTestFile.xlsx"
Dim i As Integer
With CreateObject("Shell.Application").Namespace("C:\Users\XXXX\Documents\Safe Space\MacroTest\")
GetTags = .GetDetailsOf(.Items.Item(strFile), 18)
End With
End Function
我唯一要改变的就是论证 .GetDetailsOf
方法,从常量切换到变量。每当它运行时,它就会停在该行上,并显示“错误445:对象不支持此操作”
我究竟做错了什么?
strPath & strFile
到GetTags而不仅仅是strFile。我的意思是你可以将它作为文字串联传递,你不一定要将它作为两个参数传递。