[英]VBA opening/closing workbooks on MAC throws error
The following macro has no problems on windows but throws a runtime error on a MAC.以下宏在 Windows 上没有问题,但在 MAC 上引发运行时错误。 The problem is that I do not have a MAC to test this on.
问题是我没有 MAC 来测试这个。 The code simply picks up the locations of 2 files (A & B) from cells on another sheet, opens them, copies the data into another sheet and does some calculations.
该代码只是从另一张工作表上的单元格中选取 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
A version where the data is already in the same workbook on other sheets works fine.数据已经在其他工作表上的同一个工作簿中的版本工作正常。 So it must be opening/closing/switching between the workbooks that isn't working.
所以它必须在不工作的工作簿之间打开/关闭/切换。
好吧,没有关于变量内容的细节,我只是猜测这是 Windows 和 Mac 之间的文件位置 URI 差异...... Sheets("Control").Range("C2")
什么?
Try fully qualifying everything and declaring all vaiables - see if this makes things more obvious to the processor:尝试完全限定所有内容并声明所有变量 - 看看这是否让处理器更明显:
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
Depends on 2011 (: as separator) vs 2016 (Posix path) Office for Mac取决于 2011(:作为分隔符)与 2016(Posix 路径)Office for Mac
http://www.rondebruin.nl/mac/mac017.htm http://www.rondebruin.nl/mac/mac017.htm
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.