2012-07-19 18 views
9

Sto cercando di scrivere un valore alla cella "A1", ma sto ottenendo il seguente errore:Scrittura di una stringa a una cella in Excel

Application-defined or object-defined error '1004'

ho provato molte soluzioni in rete, ma nessuno stanno lavorando. Sto usando Excel 2007 e il file extensiton è .xlsm.

Il mio codice è il seguente:

Sub varchanger() 
On Error GoTo Whoa 
Dim TxtRng As Range 

Worksheets("Game").Activate 
ActiveSheet.Unprotect 

Set TxtRng = ActiveWorkbook.Sheets("Game").Cells(1, 1) 
TxtRng.Value = "SubTotal" 

'Worksheets("Game").Range("A1") = "Asdf" 

LetsContinue: 
    Exit Sub 
Whoa: 
    MsgBox Err.number 
    Resume LetsContinue 
End Sub 

Edit: Dopo ottengo l'errore se clicco sull'icona cautela e quindi selezionare Mostra calcolo passo il relativo funzionamento corretto

+7

Se non ero fuori di voti, mi piacerebbe +1 per ' On Error Goto Whoa' – LittleBobbyTables

+0

@LittleBobbyTables Grazie. Questo errore mi sta davvero spaventando – knightrider

+0

Ho provato ad eseguire il tuo codice * esatto * e ha funzionato senza problemi su entrambi i miei Excel 2003 ed Excel 2010. Spiacente, non ho Excel 2007 da provare. –

risposta

12

Penso che potresti essere inciampato sulla protezione del foglio. Ho semplificato un po 'il tuo codice e sto impostando esplicitamente i riferimenti alla cartella di lavoro e agli oggetti del foglio di lavoro. Nell'esempio, si fa esplicitamente riferimento alla cartella di lavoro e al foglio quando si imposta l'oggetto TxtRng, ma non quando si priva di protezione il foglio.

Prova questo:

Sub varchanger() 

    Dim wb As Workbook 
    Dim ws As Worksheet 
    Dim TxtRng As Range 

    Set wb = ActiveWorkbook 
    Set ws = wb.Sheets("Sheet1") 
    'or ws.Unprotect Password:="yourpass" 
    ws.Unprotect 

    Set TxtRng = ws.Range("A1") 
    TxtRng.Value = "SubTotal" 
    'http://stackoverflow.com/questions/8253776/worksheet-protection-set-using-ws-protect-but-doesnt-unprotect-using-the-menu 
    ' or ws.Protect Password:="yourpass" 
    ws.Protect 

End Sub 

Se corro il sub con ws.Unprotect commentata, ottengo un errore di runtime 1004. commentando la (Supponendo che ho protetto il foglio e ho la gamma bloccato.) linea consente al codice di funzionare correttamente.

NOTE:

  1. io sono la protezione del foglio ri-regolazione dopo aver scritto alla gamma. Suppongo che tu voglia fare questo se tu avessi il foglio protetto in primo luogo. Se si ripristina la protezione in un secondo momento dopo un'ulteriore elaborazione, sarà necessario rimuovere tale linea.
  2. Ho rimosso il gestore degli errori. Il messaggio di errore di Excel fornisce molti più dettagli rispetto a Err.number. Puoi rimetterlo quando il tuo codice funzionerà e mostrerai tutto quello che vuoi. Ovviamente puoi usare Err.Description pure.
  3. La notazione Cells(1, 1) può causare un'enorme quantità di dolore. Stai attento ad usarlo. Range("A1") è molto più facile da analizzare per gli esseri umani e tende a prevenire errori di schiaffo sulla fronte.
+0

Questo non funziona anche – knightrider

+0

Qual era la descrizione dell'errore? (il messaggio di errore completo, non solo 1004) –

+0

Definito dall'applicazione o definito da un oggetto – knightrider

0

provare questo invece

Set TxtRng = ActiveWorkbook.Sheets("Game").Range("A1")

AGGIUNTA

Forse il file è danneggiato, mi è successo diverse volte e l'unica soluzione è copiare tutto in un nuovo file.

favore potete provare la seguente:

  • salva un nuovo file xlsm e lo chiamano "MyFullyQualified.xlsm"
  • aggiungere un foglio senza protezione e lo chiamano "mysheet"
  • Aggiungi un modulo alla cartella di lavoro e aggiungere la seguente procedura

esegue?

Sub varchanger() 

With Excel.Application 
    .ScreenUpdating = True 
    .Calculation = Excel.xlCalculationAutomatic 
    .EnableEvents = True 
End With 

On Error GoTo Whoa: 

    Dim myBook As Excel.Workbook 
    Dim mySheet As Excel.Worksheet 
    Dim Rng As Excel.Range 

    Set myBook = Excel.Workbooks("MyFullyQualified.xlsm") 
    Set mySheet = myBook.Worksheets("mySheet") 
    Set Rng = mySheet.Range("A1") 

    'ActiveSheet.Unprotect 


    Rng.Value = "SubTotal" 

    Excel.Workbooks("MyFullyQualified.xlsm").Worksheets("mySheet").Range("A1").Value = "Asdf" 

LetsContinue: 
     Exit Sub 
Whoa: 
     MsgBox Err.Number 
     GoTo LetsContinue 

End Sub 
+0

Stesso errore !!! error 1004 – knightrider

+0

classic - si prega di spegnere e riaccendere Excel; forse riavvia anche la tua macchina. – whytheq

+0

Disattivare Excel non ha aiutato. Proverò a riavviare – knightrider

0

Ho avuto un paio di mirtilli vodka stasera così potrei mancare qualcosa ... Sta impostando la gamma necessaria? Perché non utilizzare:

Activeworkbook.Sheets("Game").Range("A1").value = "Subtotal" 

Anche questo fallisce?

Sembra che si è tentato qualcosa di simile:

'Worksheets("Game").Range("A1") = "Asdf" 

Tuttavia, fogli di lavoro è una raccolta, quindi non si può fare riferimento a "Gioco". Penso che sia necessario utilizzare l'oggetto Fogli invece.

+0

@UberNublsTrue Questo restituisce anche lo stesso errore – knightrider

1

sostituire Range ("A1") = "asdf" con Range ("A1"). Value = "asdf"

Problemi correlati