2012-08-29 10 views
5

Ho un problema con Excel, con un modulo che genera un numero di riferimento. Ma quando provo a generare il riferimento no. ha un messaggio di errore che dice:Errore di run-time '1004': metodo 'Range' di object'_Global 'fallito

run-time '1004': 'Gamma' Modalità di object'_Global' riuscito

Quando clicco sul pulsante Debug, che mostra il codice come di seguito :

Si evidenziare l'errore sulla linea 4 del codice

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 

qualcuno mi può aiutare con questo problema? Non so cosa è andato storto?

+3

Quali sono i valori di 'inputTemplateContent' e' NO_ENTRY' quando si riceve l'errore? Funziona con 'Imposta intervallo (inputTemplateContent) = NO_ENTRY'? – assylias

+0

Nel caso qualcuno abbia lo stesso problema: se usi Range specificando book e sheet e finisci con questo errore, verifica che il nome del libro non abbia spazi bianchi (forse è ovvio ma se hai macro legacy e non hai mai usato VBA per Excel questo può essere complicato). – EAmez

risposta

21

Quando si fa riferimento a Intervallo come quello, viene chiamato un riferimento non qualificato perché non si specifica specificamente su quale foglio è inserito l'intervallo. I riferimenti non qualificati sono gestiti dall'oggetto "_Global" che determina l'oggetto a cui ti stai riferendo e che dipende da dove si trova il tuo codice.

Se si è in un modulo standard, l'intervallo non qualificato si riferirà a Activesheet. Se ti trovi nel modulo di classe di un foglio, l'intervallo non qualificato si riferirà a quel foglio.

inputTemplateContent è una variabile che contiene un riferimento a un intervallo, probabilmente un intervallo denominato. Se si osserva la proprietà RefersTo di tale intervallo denominato, è probabile che punti a un foglio diverso da Activesheet al momento dell'esecuzione del codice.

Il modo migliore per risolvere questo problema è evitare riferimenti di intervallo non qualificati specificando il foglio. Mi piace

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

Regola i riferimenti del foglio di lavoro e del foglio di lavoro per adattarli alla situazione specifica.

Problemi correlati