对于mac,是否有Excel 2011 VBA中的Scripting.FileSystemObject的替代方案?

对于mac,是否有Excel 2011 VBA中的Scripting.FileSystemObject的替代方案?,excel,vba,macos,filesystemobject,Excel,Vba,Macos,Filesystemobject,对的回答似乎表明,在Excel 2010中为mac使用脚本.FileSystemObject是不可能的 还有什么备选方案可用,我可以: 获取特定目录中所有Excel文件的集合 遍历每个文件中的每个工作表,并将其导出到.csv文件中 目前,每个文件都有六个步骤: --how to create CSV files for all worksheets in a file: 1. open file 2. click "Developer" 3. click editor 4. click Th

对的回答似乎表明,在Excel 2010中为mac使用
脚本.FileSystemObject
是不可能的

还有什么备选方案可用,我可以:

  • 获取特定目录中所有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
函数GetFileList(folderPath作为字符串)作为集合
'mac vba不支持DIR函数中的通配符
将文件设置为字符串
作为新的收藏收藏收藏
如果右$(folderPath,1)“/”则
folderPath=folderPath&“/”
如果结束
file=Dir$(folderPath)'设置初始文件
边做边读(文件)
returnCollection.addfolderpath和file
file=Dir$
环
设置GetFileList=returnCollection
端函数

我能想到的唯一方法就是使用“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
函数GetFileList(folderPath作为字符串)作为集合
'mac vba不支持DIR函数中的通配符
将文件设置为字符串
作为新的收藏收藏收藏
如果右$(folderPath,1)“/”则
folderPath=folderPath&“/”
如果结束
file=Dir$(folderPath)'设置初始文件
边做边读(文件)
returnCollection.addfolderpath和file
file=Dir$
环
设置GetFileList=returnCollection
端函数

您可以将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

您可以将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