0

次のマクロは 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

データが他のシートの同じワークブックに既にあるバージョンは正常に機能します。したがって、機能していないワークブックを開く/閉じる/切り替える必要があります。

4

3 に答える 3

2

変数の内容の詳細がなくても、Windows と Mac のファイルの場所の URI の違いだと思います...何が入っていSheets("Control").Range("C2")ますか?

于 2013-01-07T04:45:27.387 に答える
1

すべてを完全に修飾し、すべての変数を宣言してみてください。これにより、プロセッサにとって物事がより明確になるかどうかを確認してください。

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
于 2013-01-05T14:01:38.813 に答える
0

2011 (: セパレータとして) と 2016 (Posix パス) Office for Mac によって異なります

http://www.rondebruin.nl/mac/mac017.htm

于 2017-03-29T08:08:43.247 に答える