12

参照番号を生成するフォームで、Excel に問題があります。しかし、参照番号を生成しようとすると。次のようなエラー メッセージが表示されます。

実行時エラー '1004': オブジェクト '_Global' のメソッド 'Range' が失敗しました

[デバッグ] ボタンをクリックすると、次のようなコードが表示されます。

コードの4行目のエラーを強調表示します

Sub clearTemplate()
    ' Clear Template Content
    Range(inputTemplateHeader) = NO_ENTRY
    Range(inputTemplateContent) = NO_ENTRY     - (highlighted error)
End Sub

Sub clearRefNo()
    ' Clear cell G2 reference number
    Range(cellRefNo) = NO_ENTRY

    ' Open "Report_ref_no.xls"
    If Not (IsFileOpen) Then Workbooks.Open filename:=ThisWorkbook.Path & "\" & FACCESS

    ' Activate "Report_ref_no.xls"
    Windows(FACCESS).Activate

    ' Access column D
    Range(cellFirstRefNo).Select
    Selection.End(xlDown).Select

    If refNo = Cells(ActiveCell.Row, ActiveCell.Column - 1).Value Then
        ' Log Development Code column
        Cells(ActiveCell.Row, ActiveCell.Column) = NO_ENTRY

        ' Log Issuer column
        Cells(ActiveCell.Row, ActiveCell.Column + 1).Value = NO_ENTRY

        ' Log Date column
        Cells(ActiveCell.Row, ActiveCell.Column + 2).Value = NO_ENTRY
    End If

    ' Save & Close workbook
    ActiveWindow.Close True
End Sub

誰でもこの問題を解決できますか? 何がいけなかったのかわからない?

4

1 に答える 1

30

そのように範囲を参照する場合、範囲がどのシートにあるかを具体的に指定しないため、非修飾参照と呼ばれます。修飾されていない参照は、参照しているオブジェクトを決定し、コードの場所に依存する「_Global」オブジェクトによって処理されます。

標準モジュールを使用している場合、修飾されていない範囲はアクティブシートを指します。シートのクラスモジュールを使用している場合、修飾されていない範囲はそのシートを参照します。

inputTemplateContentは、範囲(おそらく名前付き範囲)への参照を含む変数です。その名前付き範囲のRefersToプロパティを見ると、コードの実行時にActivesheet以外のシートを指している可能性があります。

これを修正する最善の方法は、シートを指定して、修飾されていない範囲参照を回避することです。好き

With ThisWorkbook.Worksheets("Template")
    .Range(inputTemplateHeader).Value = NO_ENTRY
    .Range(inputTemplateContent).Value = NO_ENTRY
End With

特定の状況に合わせて、ワークブックとワークシートの参照を調整します。

于 2012-08-29T12:54:15.353 に答える