簡體   English   中英

在Macintosh上的多個文件上運行Excel VBA代碼

[英]Running excel vba code on multiple files on Macintosh

我有以下在Excel中編寫的代碼:

    Sub Multiple()
    MyDir = ActiveWorkbook.Path
        strPath = MyDir & ":"

        strFile = Dir(strPath, MacID("TEXT"))

        'Loop through each file in the folder
        Do While Len(strFile) > 0
            If Right(strFile, 3) = "csv" Then
                Debug.Print strFile
                DoWork (strFile)
            End If

            strFile = Dir
        Loop
End Sub

Sub DoWork(wb As Workbook)
    With wb
        Range("E:E,K:K").Select
        Range("K1").Activate
        Selection.Delete Shift:=xlToLeft
        ActiveSheet.Range("b1").End(xlDown).Select
        ActiveCell.FormulaR1C1 = "=AVERAGE(R[-3]C:R[-1]C)/1000"
        ActiveSheet.Range("b1").End(xlDown).Select
        Selection.AutoFill Destination:=Range(ActiveCell, ActiveCell.Offset(0, 2)), Type:=xlFillDefault
        ActiveSheet.Range("e1").End(xlDown).Select
        ActiveCell.FormulaR1C1 = "=AVERAGE(R[-3]C:R[-1]C)"
        ActiveSheet.Range("e1").End(xlDown).Select
        Selection.AutoFill Destination:=Range(ActiveCell, ActiveCell.Offset(0, 4)), Type:=xlFillDefault
    End With
End Sub

我想做的是運行底部的Sub DoWork() ,它對Macintosh上的多個文件上的excel文件進​​行一些基本編輯。 為此,我編寫了上層Sub Multiple() ,它最終應在多個文件上運行底部的Sub。 文件類型是CSV文件。

當在每個Excel文件上單獨運行底部代碼時,它們可以完美工作。 但是,最上面的代碼並不能解決在所有多個文件上運行的問題。

有人知道為什么嗎?

在您的Multiple代碼中,您正在將字符串參數(文件名)傳遞給DoWork,但是DoWork希望您傳遞Workbook對象。

您將需要將strPath和strFile結合在一起(在Windows中為strPath & "\\" & strFile我認為在Mac上將是類似的東西),然后打開工作簿。 我建議在您目前僅在執行DoWork (strFile)地方使用以下代碼:

Set wb = Workbooks.Open(strPath & "\" & strFile)  ' Adjust to suit for Mac filename syntax
DoWork wb
wb.Save
wb.Close False

好。 弄清楚了 :-)

    Sub Multiple()

    Dim SecDir As String
    Dim MyDir As String
    Dim wbk As Workbook


    MyDir = "tlv-mpzyw:Users:lcohen:Google Drive:SQA:Projects:vbaBotRegression:"
    SecDir = "files:"
    strPath = MyDir & SecDir
    Debug.Print strPath
    strFile = Dir(strPath)

    'Loop through each file in the folder
    Do While Len(strPath) > 0
        If Right(strFile, 3) = "csv" Then
            Debug.Print strFile
            Set wbk = Workbooks.Open(Filename:=strPath & strFile)
            Range("E:E,K:K").Select
            Range("K1").Activate
            Selection.Delete Shift:=xlToLeft
            ActiveSheet.Range("b1").End(xlDown).Select
            ActiveCell.FormulaR1C1 = "=AVERAGE(R[-3]C:R[-1]C)/1000"
            ActiveSheet.Range("b1").End(xlDown).Select
            Selection.AutoFill Destination:=Range(ActiveCell, ActiveCell.Offset(0, 2)), Type:=xlFillDefault
            ActiveSheet.Range("e1").End(xlDown).Select
            ActiveCell.FormulaR1C1 = "=AVERAGE(R[-3]C:R[-1]C)"
            ActiveSheet.Range("e1").End(xlDown).Select
            Selection.AutoFill Destination:=Range(ActiveCell, ActiveCell.Offset(0, 4)), Type:=xlFillDefault
            wbk.Close SaveChanges:=False
        End If

        strFile = Dir
    Loop
End Sub

現在,我還有另一個問題,正在收到以下錯誤消息:

運行時錯誤“ 1004”:

找不到'TLV-MPZYW:USERS:LCOHEN:GOOGLE DRIVE:SQA:PROJECTS:VBABOTREGRESSION:FILES:SAMPLES_MULTIPLE_FILTERS_QUERIES-STATISTICS.CSV'。請檢查文件名的拼寫,並驗證文件位置是否正確。

如果您試圖從“文件”菜單上的最近使用過的文件列表中打開文件,請確保未重命名,移動或刪除該文件。

在這一點上,我不了解可能導致此問題的原因。 正如您在我的代碼中看到的那樣,我正在打印文件名以驗證它確實可以正確讀取它。

任何人?????

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM