2012-08-29 2 views
5

참조 번호를 생성하는 폼으로 Excel에서 문제가 있습니다. 하지만 참조 번호를 생성하려고하면런타임 오류 '1004': 메서드 '개체'_Global '범위'실패했습니다.

오류 '1004'런타임 : : 방법 '범위'object'_Global의 '

내가 디버그 버튼을 클릭

실패, 그것은 다음과 같이 코드를 보여줍니다 그것은라는 오류 메시지가 :

그것은

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 번째 줄에 오류를 강조? 나는 잘못 된 것이 무엇인지 모르겠다.

+3

오류가 발생하면'inputTemplateContent' 및'NO_ENTRY'의 값은 무엇입니까? 그것은'Set Range (inputTemplateContent) = NO_ENTRY'에서 작동합니까? – assylias

+0

혹시 같은 문제가 생길 경우를 대비하여 책과 시트를 지정하는 Range를 사용하고이 오류로 끝나면 책 이름에 공백이 없습니다 (어쩌면 당연한 것 일지 모르지만 레거시 매크로가 있고 VBA를 사용한 적이없는 경우). Excel의 경우 이는 까다로울 수 있음). – EAmez

답변

21

레인지를 참조 할 때 레인지가 어느 시트인지 구체적으로 밝히지 않았으므로 정규화되지 않은 참조라고합니다. 규정되지 않은 참조는 참조하는 오브젝트와 코드의 위치에 따라 결정되는 "_Global"오브젝트에 의해 처리됩니다.

표준 모듈을 사용하는 경우 정규화되지 않은 Range는 Activesheet를 참조합니다. 시트의 클래스 모듈에있는 경우 정규화되지 않은 Range가 해당 시트를 참조합니다.

inputTemplateContent는 범위에 대한 참조 (아마도 명명 된 범위)를 포함하는 변수입니다. 해당 명명 된 범위의 RefersTo 속성을 보면 코드가 실행될 때 Activesheet가 아닌 다른 시트를 가리킬 가능성이 높습니다.

이 문제를 해결하는 가장 좋은 방법은 시트를 지정하여 규정되지 않은 범위 참조를 피하는 것입니다. 마찬가지로

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

특정 상황에 맞게 통합 문서 및 워크 시트 참조를 조정하십시오.

관련 문제