【问题标题】:Is there an alternative to Scripting.FileSystemObject in Excel 2011 VBA for the mac?Excel 2011 VBA for mac 中是否有 Scripting.FileSystemObject 的替代方案?
【发布时间】:2011-01-13 07:53:03
【问题描述】:

How can I install/use “Scripting.FileSystemObject” in Excel 2011 for MAC? 的答案似乎表明在 Excel 2010 for mac 中使用Scripting.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 的完全自动转换?

【问题讨论】:

    标签: excel vba macos filesystemobject


    【解决方案1】:

    我能想到的唯一方法是使用“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
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-29
        • 2016-10-07
        • 1970-01-01
        • 1970-01-01
        • 2011-05-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多