2011-01-13 16 views
0

Die Antworten auf How can I install/use “Scripting.FileSystemObject” in Excel 2011 for MAC? scheinen darauf hinzuweisen, dass die Verwendung von Scripting.FileSystemObject in Excel 2010 für den Mac nicht möglich ist.Gibt es eine Alternative zu Scripting.FileSystemObject in Excel 2011 VBA für den Mac?

Welche anderen alternative vorhanden ist, so kann ich:

  • erhalten eine Sammlung aller Excel-Dateien in einem bestimmten Verzeichnis
  • Iterierte durch jedes Arbeitsblatt in jeder Datei und exportieren zu a .csv Datei

Derzeit dies ist ein sechsstufige Prozess für jede Datei:

--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) 

Ich bin für eine Art und Weise zu dies auf dem Mac, idealerweise automatisieren suchen, ein (? cron-Job ?, Service) öffnen würde die Excel-Datei alle 10 Minuten, die wiederum in einem Verzeichnis suchen, alle anderen Excel-Dateien in .csv-Dateien konvertieren und dann selbst schließen.

Ohne Scripting.FileSystemObject, wie kann ich diese Konvertierung von Excel in CSV auf dem Mac vollautomatisch machen?

Antwort

1

Die einzige Möglichkeit, die ich mir vorstellen kann, ist die Verwendung der Funktion "Dir". Da Mac zusätzliche Zeichen in ihren Dateinamen unterstützt, funktionieren Wildcards nicht mit der Funktion "Dir". Hier ist ein Beispiel.

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