我有一個 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 嗎?
uj5u.com熱心網友回復:
這是一個子程式,使用本機 VBA DIR 命令,通過在除錯視窗上列印名稱來列出檔案夾中的 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 處理其他待處理的用戶界面活動,例如視窗重繪 、滑鼠單擊。如果檔案夾中有很多檔案(數千個),Excel 可能會在這樣的回圈中出現無回應/凍結。沒有必要,因為一旦完成回圈,它將再次回應。如果你只有幾百個檔案,那么這是一個矯枉過正。洗掉并嘗試。
uj5u.com熱心網友回復:
VBA for Mac 可以鏈接到整個 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 標準庫進行檔案操作,你可以這樣做。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/474091.html
上一篇:在MacOS上截屏
下一篇:使用Mutablelivedata從DialogFragmentColorPicker更改片段的背景顏色不起作用
