如何防止MS Access VBA将对象转换为字符串?
问题描述:
我想传递一个VBA模块中的文件夹中对象的集合,但它一贯执行的对象为String类型如何防止MS Access VBA将对象转换为字符串?
Function GetFolderFiles(ByRef dir As Object) As Collection
Dim files As Collection
Set files = New Collection
For Each file In dir.files
Debug.Print TypeName(file)
files.Add (file)
Next frile
For Each subfolder In dir.SubFolders
Dim sf As Object
Set sf = subfolder
Debug.Print TypeName(sf)
Dim tmpfiles As Collection
Set tmpfiles = GetFolderFiles(sf)
For Each File In tmpfiles
files.Add (File)
Next File
Next subfolder
Set GetFolderFiles = files
End Function
这里隐式转换是我的测试代码:
Function TestGetFiles()
Dim fso As Object
Dim d As Object
Dim files As Collection
Set fso = CreateObject("Scripting.FileSystemObject")
Set d = fso.GetFolder("C:\Users\X\Documents\My Web Sites")
Set files = GetFolderFiles(d)
For Each f In files
Debug.Print TypeName(f)
Next f
End Function
正如你所看到的,我打印出TypeName()调用的结果。当我遍历这些函数时,我在GetFolderFiles中获得预期的类型“File”,但是当我迭代返回的集合时,对象的类型是“String”。
1)如何从我的函数中获取File对象的集合?
2)更一般地说,如何防止对象隐式转换为字符串?
答
有f
和(f)
之间的差,如在下面的代码说明:
Function TestGetFiles()
Dim fso As Object
Dim d As Object, f As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Set d = fso.GetFolder("C:\_Stuff\test")
For Each f In d.files
Debug.Print TypeName(f), TypeName((f)) '>> File String
Next f
End Function
f
是文件本身,而是包裹在括号f
使该要计算的表达式(导致串:我猜File
的默认属性是Name
) 并且评估的结果是添加到您的收藏中的内容。
修复:不使用
files.Add (File)
但
files.Add File
提示:你的开场(
之前的任何时间的VB编辑器把一个空间意味着你需要确保你的意思是使用那些括号。在方法调用中使用parens时基本要小心,除非您使用关键字Call
。
谢谢蒂姆,这解决了它。我感谢帮助! – egalitarianeric