vba プログラムで範囲を参照する際に問題が発生しています。次のコード スニペットは、元のコードを示しています。
With Worksheets("Overall 6 mo")
.Columns("A:G").ColumnWidth = 13.57
.Range("A1:Z100").Rows.RowHeight = 15
.Columns("F:G").NumberFormat = "0.00%"
.Range("B3:G3") = Worksheets("TEMPLATE").Range("A3:F3").Value
.Range("F4:G100") = Worksheets("TEMPLATE").Range("E4:F100").Formula
.Range("A1").NumberFormat = "@"
.Range("A1") = .Name
End With
これにより、3行目を通過した後、「ランタイム1004アプリケーション定義またはオブジェクト定義エラー」がスローされます。
.Range("A1:Z100").Rows.RowHeight = 15
に
.Rows.RowHeight = 15
ポイントは、使用する必要があるセルの高さを 15 にすることで、変更によってプログラムが損なわれることはありませんでした。そして今、それは許可されますが、範囲を再度参照する次の行で同じエラーがスローされます。だから私は .range の使用を許可しない理由を理解しようとしていますか? または、少なくともどうすれば修正できますか?
更新:ワークブックのどこでも.Rangeメソッドを使用できないことに気付きました(上記の例だけではありません)。どこでも .Range を使用できないようにするにはどうすればよいですか?
UPDATE2: 2 行目で .Columns メソッドを使用できなくなりました。私は何もしていませんが、数回ステップスルーします。このことの何が問題なのですか?
UPDATE3: Excel を再起動すると、ワークシートの "Overall 6 mo" コードを 1 回実行できるようになり、その後毎回エラーがスローされ始めるようです。シートの残りのコードを含めました。
Option Explicit
Private Sub Worksheet_Activate()
Application.ScreenUpdating = False
Dim shIndex As Integer
Dim rowIndex As Integer
Dim myLastRow As Integer
Dim shLastRow As Integer
Dim col As Integer
myLastRow = Worksheets("Overall 6 mo").Cells(65536, 1).End(xlUp).Row
' Format Worksheet
Sheets("Overall 6 mo").Cells.Clear
With Worksheets("Overall 6 mo")
.Columns.ColumnWidth = 13.57
.Rows.RowHeight = 15
.Columns("F:G").NumberFormat = "0.00%"
.Range("B3:G3") = Worksheets("TEMPLATE").Range("A3:F3").Value
.Range("F4:G100") = Worksheets("TEMPLATE").Range("E4:F100").Formula
.Range("A1").NumberFormat = "@"
.Range("A1") = .Name
End With
' Clear current sheet data
myLastRow = Worksheets("Overall 6 mo").Cells(65536, 2).End(xlUp).Row
Worksheets("Overall 6 mo").Range(Cells(4, 1), Cells(myLastRow, 7)).Clear
' Compile data from last six months and add to and display on "Overall 6 mo" sheet
For shIndex = Worksheets.Count - 5 To Worksheets.Count
Worksheets(shIndex).Activate
myLastRow = Worksheets("Overall 6 mo").Cells(65536, 2).End(xlUp).Row
shLastRow = Worksheets(shIndex).Cells(65536, 1).End(xlUp).Row
Worksheets("Overall 6 mo").Cells(myLastRow + 1, 1).Value _
= MonthName(Month(CDate(Worksheets(shIndex).Name)), False)
Worksheets(shIndex).Range("A4:D" & shLastRow) _
.Copy (Worksheets("Overall 6 mo").Cells(myLastRow + 1, 2))
Next shIndex
' Call UpdateChart to clear and re-add Quality and Cost charts to wks
Call UpdateCharts(Worksheets("Overall 6 mo").Index)
Worksheets("Overall 6 mo").Activate
Application.ScreenUpdating = True
サブ終了