繁体   English   中英

是否有适用于 Mac 的 Excel 2011 VBA 中 Scripting.FileSystemObject 的替代方案?

[英]Is there an alternative to Scripting.FileSystemObject in Excel 2011 VBA for the mac?

如何在 Excel 2011 for MAC 中安装/使用“Scripting.FileSystemObject”的答案 似乎表明,使用Scripting.FileSystemObject Excel 2010中为Mac是不可能的。

还有什么其他选择可用,以便我可以:

  • 获取特定目录中所有 Excel 文件的集合
  • 遍历每个文件中的每个工作表并将其导出到.csv文件

目前,这是每个文件的六步过程:

--how to create CSV files for all worksheets in a file:
1. open file
2. click "Developer"
3. click editor
4. click ThisWorkbook
5. copy in:
Sub save_all_csv()
    On Error Resume Next
    Dim ExcelFileName As String
    ExcelFileName = ThisWorkbook.Name
    For Each objWorksheet In ThisWorkbook.Worksheets
        Filename = "FILE-" & ExcelFileName & "-WORKSHEET-" & objWorksheet.Name & ".csv"
        objWorksheet.SaveAs Filename:="Macintosh HD:Users:edward:Documents:temporaryNoBackup:" & Filename, FileFormat:=xlCSV, CreateBackup:=False
    Next
    Application.DisplayAlerts = False
    Application.Quit
End Sub
6. click run (it closes by itself)

我正在寻找一种在 Mac 上自动执行此操作的方法,理想情况下,(cron 作业?,服务?)将每 10 分钟打开一次 excel 文件,这将依次查看目录,将所有其他 Excel 文件转换为.csv 文件,然后自行关闭。

如果没有 Scripting.FileSystemObject,我如何才能在 Mac 上完全自动进行 Excel 到 CSV 的转换?

我能想到的唯一方法是使用“Dir”函数。 由于 mac 支持文件名中的额外字符,通配符不适用于“Dir”函数。 这是一个示例。

Function GetFileList(folderPath As String) As Collection
'mac vba does not support wildcards in DIR function

    Dim file As String
    Dim returnCollection As New Collection

    If Right$(folderPath, 1) <> "/" Then
        folderPath = folderPath & "/"
    End If

    file = Dir$(folderPath) 'setup initial file

    Do While Len(file)
        returnCollection.Add folderPath & file
        file = Dir$
    Loop

    Set GetFileList = returnCollection
End Function

您可以将 VBA 放在附加到 Excel 本身而不是工作簿的加载项(.xlam 文件)中。 对于您的示例代码,唯一的修改是针对ActiveWorkbook而不是ThisWorkbook编写。

Sub save_all_csv()
    On Error Resume Next
    Dim ExcelFileName As String
    ExcelFileName = ActiveWorkbook.Name
    For Each objWorksheet In ActiveWorkbook.Worksheets
        Filename = "FILE-" & ExcelFileName & "-WORKSHEET-" & objWorksheet.Name & ".csv"
        objWorksheet.SaveAs Filename:="Macintosh HD:Users:edward:Documents:temporaryNoBackup:" & Filename, FileFormat:=xlCSV, CreateBackup:=False
    Next
    Application.DisplayAlerts = False
    Application.Quit
End Sub

您还可以利用 auto_open() 自动绑定热键。 完成后,您只需打开工作簿,按热键,即可获取 CSV 文件。

Public Sub auto_open()

'   Register hotkeys

'   See key codes here
'   https://msdn.microsoft.com/en-us/vba/excel-vba/articles/application-onkey-method-excel

'   ^ = CTRL
'   % = ALT
'   + = SHIFT

    Application.OnKey "^+e", "save_all_csv" ' Ctrl+Shift+E will call save_all_csv()

End Sub

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM