[英]Excel/VBA freezes during the loop that executes opening/closing of workbooks
[英]VBA opening/closing workbooks on MAC throws error
以下宏在 Windows 上沒有問題,但在 MAC 上引發運行時錯誤。 問題是我沒有 MAC 來測試這個。 該代碼只是從另一張工作表上的單元格中選取 2 個文件(A 和 B)的位置,打開它們,將數據復制到另一張工作表中並進行一些計算。
Sub Compile()
Application.ScreenUpdating = False
ThisBook = ActiveWorkbook.Name
'open A
Workbooks.Open (Sheets("Control").Range("C2"))
ABook = ActiveWorkbook.Name
'copy data from A
Workbooks(ThisBook).Sheets("Data").Cells.Clear
ActiveSheet.UsedRange.Copy Workbooks(ThisBook).Sheets("data").Range("A1")
'close A
Workbooks(ThisBook).Activate
Workbooks(ABook).Close False
'prep A
Sheets("data").Activate
C = Range("A" & Cells.Rows.Count).End(xlUp).Row
'some calculation
'open B
Workbooks.Open (Sheets("Control").Range("C5"))
BBook = ActiveWorkbook.Name
'prep B
D = ActiveSheet.Range("A" & Cells.Rows.Count).End(xlUp).Row
'some calculation
'copy B
Range("M2:M" & D).Copy Workbooks(ThisBook).Sheets("data").Range("O2")
'close B
Workbooks(ThisBook).Activate
Workbooks(BBook).Close False
'calculate
Sheets("data").Activate
'some more calculations
Application.ScreenUpdating = True
End Sub
數據已經在其他工作表上的同一個工作簿中的版本工作正常。 所以它必須在不工作的工作簿之間打開/關閉/切換。
好吧,沒有關於變量內容的細節,我只是猜測這是 Windows 和 Mac 之間的文件位置 URI 差異...... Sheets("Control").Range("C2")
什么?
嘗試完全限定所有內容並聲明所有變量 - 看看這是否讓處理器更明顯:
Sub Compile()
Excel.Application.ScreenUpdating = False
Dim ThisBook As String
ThisBook = Excel.ActiveWorkbook.Name
'open A
Workbooks.Open (Sheets("Control").Range("C2"))
ABook = ActiveWorkbook.Name
'copy data from A
with Excel.Workbooks(ThisBook)
.Sheets("Data").Cells.Clear
.ActiveSheet.UsedRange.Copy .Sheets("data").Range("A1")
end with
'close A
Excel.Workbooks(ThisBook).Activate
Excel.Workbooks(ABook).Close False
'prep A
with Excel.Workbooks(ThisBook).Sheets("data")
.Activate
Dim c as integer
C = .Range("A" & .Rows.Count).End(Excel.xlUp).Row
end with
'some calculation
'open B
Excel.Workbooks.Open (Excel.Workbooks(ThisBook).Sheets("Control").Range("C5"))
dim BBook as string
BBook = Excel.ActiveWorkbook.Name
'prep B
dim D as integer
with Excel.ActiveSheet.
D = .Range("A" & .Rows.Count).End(Excel.xlUp).Row
end with
'some calculation
'copy B
Range("M2:M" & D).Copy Excel.Workbooks(ThisBook).Sheets("data").Range("O2")
'close B
Excel.Workbooks(ThisBook).Activate
Excel.Workbooks(BBook).Close False
'calculate
Excel.Workbooks(ThisBook).Sheets("data").Activate
'some more calculations
Excel.Application.ScreenUpdating = True
End Sub
取決於 2011(:作為分隔符)與 2016(Posix 路徑)Office for Mac
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.