VBA on a MAC - 如何读取给定文件夹中的文件名(必须避免使用 Windows ActiveX 文件系统对象)
VBA on a MAC - How to read FileNames in a given Folder (have to avoid using the Windows ActiveX FileSystemObject)
我有一个 Windows VBA 代码,我想将其翻译为 MAC,因为无法访问 ActiveX FileSystemObject。
我的目标是读取给定文件夹中所有 PNG 文件的所有文件名。此代码在 windows 上运行良好,但在 MAC:
上导致“运行时错误 429 activex 组件无法创建对象”
Function ReadFileNames(ByVal sPath As String) As Integer
Dim oFSO, oFolder, oFile As Object
Dim sFileName As String
Set oFSO = CreateObject("scripting.FileSystemObject")
Set oFolder = oFSO.getfolder(sPath)
For Each oFile In oFolder.Files
If Not oFile Is Nothing And Right(LCase(oFile.Name), 4) = ".png" Then ' read only PNG-Files
sFileName = oFile.Name
' do something with the FileName ...
End If
Next oFile
End Function
任何人都可以为 MAC 翻译此代码吗?
这是一个子程序,使用本机 VBA DIR 命令,通过在调试 window:
上打印其名称来列出文件夹中的 EXCEL 个工作簿
Public Sub DirXlList()
Const cstrPath As String = "c:\users\xxxx\misc\"
Dim strDirItem As String
strDirItem = Dir(cstrPath & "*.xlsx")
While strDirItem <> ""
Debug.Print "FileName: " & strDirItem, "FullPath: " & cstrPath & strDirItem
strDirItem = Dir()
DoEvents
Wend
End Sub
这有帮助吗?在
更新:doevents 命令允许 Excel 处理其他未决的用户界面活动,例如 window 刷新、mouse-clicks。如果一个文件夹中有很多文件(数千个),Excel 可能会像这样循环出现 unresponsive/frozen。这是没有必要的,因为一旦它完成循环,它就会再次响应。如果您只有几百个文件,那就太过分了。删除并尝试。
VBA for Mac 可以 link 到整个c标准库,像这个例子:
Private Declare PtrSafe Function CopyMemory_byPtr Lib "libc.dylib" Alias "memmove" (ByVal dest As LongPtr, ByVal src As LongPtr, ByVal size As Long) As LongPtr
懒得给你写相关的例子了,不过如果你碰巧熟悉使用c标准库进行文件操作,你可以照着做。
我有一个 Windows VBA 代码,我想将其翻译为 MAC,因为无法访问 ActiveX FileSystemObject。
我的目标是读取给定文件夹中所有 PNG 文件的所有文件名。此代码在 windows 上运行良好,但在 MAC:
上导致“运行时错误 429 activex 组件无法创建对象” Function ReadFileNames(ByVal sPath As String) As Integer
Dim oFSO, oFolder, oFile As Object
Dim sFileName As String
Set oFSO = CreateObject("scripting.FileSystemObject")
Set oFolder = oFSO.getfolder(sPath)
For Each oFile In oFolder.Files
If Not oFile Is Nothing And Right(LCase(oFile.Name), 4) = ".png" Then ' read only PNG-Files
sFileName = oFile.Name
' do something with the FileName ...
End If
Next oFile
End Function
任何人都可以为 MAC 翻译此代码吗?
这是一个子程序,使用本机 VBA DIR 命令,通过在调试 window:
上打印其名称来列出文件夹中的 EXCEL 个工作簿Public Sub DirXlList()
Const cstrPath As String = "c:\users\xxxx\misc\"
Dim strDirItem As String
strDirItem = Dir(cstrPath & "*.xlsx")
While strDirItem <> ""
Debug.Print "FileName: " & strDirItem, "FullPath: " & cstrPath & strDirItem
strDirItem = Dir()
DoEvents
Wend
End Sub
这有帮助吗?在
更新:doevents 命令允许 Excel 处理其他未决的用户界面活动,例如 window 刷新、mouse-clicks。如果一个文件夹中有很多文件(数千个),Excel 可能会像这样循环出现 unresponsive/frozen。这是没有必要的,因为一旦它完成循环,它就会再次响应。如果您只有几百个文件,那就太过分了。删除并尝试。
VBA for Mac 可以 link 到整个c标准库,像这个例子:
Private Declare PtrSafe Function CopyMemory_byPtr Lib "libc.dylib" Alias "memmove" (ByVal dest As LongPtr, ByVal src As LongPtr, ByVal size As Long) As LongPtr
懒得给你写相关的例子了,不过如果你碰巧熟悉使用c标准库进行文件操作,你可以照着做。