1

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

サブ終了

4

2 に答える 2

0

次の方法で行の高さを変更できます。

.Range("A1:Z100").RowHeight = 15

そして、Range Copyメソッドを使用できますか

Worksheets("TEMPLATE").Range("A3:F3").Copy .Range("B3")
Worksheets("TEMPLATE").Range("E4:F100").Copy .Range("F4")

アップデート:

Option Explicit

Private Sub Worksheet_Activate()    
    Dim oSh As Worksheet
    Dim shIndex As Long
    Dim rowIndex As Long
    Dim myLastRow As Long
    Dim shLastRow As Long

    Application.ScreenUpdating = False
    Set oSh = ThisWorkbook.Worksheets("Overall 6 mo")

    ' Format Worksheet
    With oSh
        .Cells.Clear
        .Columns.ColumnWidth = 13.57
        .Rows.RowHeight = 15
        .Columns("F:G").NumberFormat = "0.00%"
        .Range("A1").NumberFormat = "@"
        .Range("A1") = .Name

        .Range("B3:G3") = Worksheets("TEMPLATE").Range("A3:F3").Value
        .Range("F4:G100") = Worksheets("TEMPLATE").Range("E4:F100").Formula
    End With

    ' Clear current sheet data
    oSh.Range(oSh.Cells(4, 1), oSh.Cells(GetLastRow(oSh, 2), 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 = GetLastRow(oSh, 2)
        shLastRow = GetLastRow(Worksheets(shIndex), 1)

        oSh.Cells(myLastRow + 1, 1).Value = MonthName(Month(CDate(Worksheets(shIndex).Name)), False)
        Worksheets(shIndex).Range("A4:D" & shLastRow).Copy oSh.Cells(myLastRow + 1, 2)

    Next shIndex

    ' Call UpdateChart to clear and re-add Quality and Cost charts to wks
    Call UpdateCharts(oSh.Index)

    oSh.Activate
    Set oSh = Nothing
    Application.ScreenUpdating = True
End Sub

Private Function GetLastRow(oSheet As Worksheet, lngColumn As Long) As Long
    GetLastRow = oSheet.Cells(oSheet.UsedRange.SpecialCells(xlLastCell).Row + 1, lngColumn).End(xlUp).Row
End Function

"TEMPLATE" はインデックス 1 (または Worksheets.Count - 5 未満) の同じブックにありますか? Worksheets(shIndex).ActivateForループで毎回このサブルーチンを実行する必要がないように見えるので、コメントアウトしました。

于 2013-09-02T23:48:39.263 に答える
0

RowHeight行の一部ではなく、行全体に適用されます。

だから使う

.Range("A1:A100").EntireRow.RowHeight = 15

また

.Range("1:100").RowHeight = 15
于 2013-09-03T06:10:07.343 に答える