[英]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.