L'automazione di Excel non riesce per la seconda esecuzione del codice

Sintomi

Durante l'esecuzione di codice che usa l'automazione per controllare Microsoft Excel, potrebbe verificarsi uno dei seguenti errori:

In Microsoft Excel 97 e versioni successive di Excel, viene visualizzato uno dei messaggi di errore seguenti:

Messaggio di errore 1

Nota

Errore di runtime "1004":
Metodo '<name of method>' dell'oggetto '_Global' non riuscito

Messaggio di errore 2

Nota

Errore definito dall'applicazione o definito dall'oggetto

In Microsoft Excel 95 viene visualizzato uno dei messaggi di errore seguenti:

Messaggio di errore 1

Nota

Errore di run-time '-2147023174'
Errore di automazione OLE

Messaggio di errore 2

Nota

Errore di runtime "462":
Il computer del server remoto non esiste o non è disponibile.

Causa

Visual Basic ha stabilito un riferimento a Excel a causa di una riga di codice che chiama un oggetto, un metodo o una proprietà di Excel senza qualificare l'elemento con una variabile oggetto di Excel. Visual Basic non rilascia questo riferimento finché non si termina il programma. Questo riferimento errato interferisce con il codice di automazione quando il codice viene eseguito più di una volta.

Risoluzione

Per risolvere il problema, modificare il codice in modo che ogni chiamata a un oggetto, un metodo o una proprietà di Excel venga qualificata con la variabile oggetto appropriata.

Stato

Questo è il comportamento da progettazione.

Altre informazioni

Per automatizzare Microsoft Excel, è necessario impostare una variabile oggetto che in genere fa riferimento all'oggetto applicazione Excel o all'oggetto Cartella di lavoro di Excel. È quindi possibile impostare altre variabili oggetto per fare riferimento a un foglio di lavoro, un intervallo o altri oggetti nel modello a oggetti di Microsoft Excel. Quando si scrive codice per usare un oggetto, un metodo o una proprietà di Excel, è necessario anteporre sempre alla chiamata la variabile oggetto appropriata. In caso contrario, Visual Basic stabilisce il proprio riferimento a Excel. Questo riferimento potrebbe causare problemi quando si tenta di eseguire il codice di automazione più volte. Si noti che anche se la riga di codice inizia con la variabile oggetto, è possibile che venga effettuata una chiamata a un oggetto, un metodo o una proprietà di Excel nel mezzo della riga di codice non preceduta da una variabile oggetto.

I passaggi seguenti illustrano come riprodurre questo problema e come correggerlo.

Passaggi per riprodurre il comportamento

  1. Avviare un nuovo progetto EXE Standard in Visual Basic. Form1 viene creato per impostazione predefinita.

  2. Nel menu Progetto , fare clic su Riferimenti e quindi cercare nella Libreria di oggetti la versione di Excel che si intende automatizzare.

  3. Inserire un controllo CommandButton in Form1.

  4. Copiare l'esempio di codice seguente nella finestra del codice di Form1.

          Option Explicit
    
          Private Sub Command1_Click()
             Dim xlApp As Excel.Application
             Dim xlBook As Excel.Workbook
             Dim xlSheet As Excel.Worksheet
             Set xlApp = CreateObject("Excel.Application")
             Set xlBook = xlApp.Workbooks.Add
             Set xlSheet = xlBook.Worksheets("Sheet1")
             xlSheet.Range(Cells(1, 1), Cells(10, 2)).Value = "Hello"
             xlBook.Saved = True
             Set xlSheet = Nothing
             Set xlBook = Nothing
             xlApp.Quit
             Set xlApp = Nothing
          End Sub
    
    
  5. Scegliere Start dal menu Esegui oppure premere F5 per avviare il programma.

  6. Fare clic sul controllo CommandButton . Non si verifica alcun errore. Tuttavia, è stato creato un riferimento a Excel che non è stato rilasciato.

  7. Fare di nuovo clic sul controllo CommandButton . Si noti che viene visualizzato uno dei messaggi di errore descritti nella sezione "Sintomi".

    Nota Il messaggio di errore viene visualizzato perché il codice fa riferimento al metodo della cella senza far precedere la chiamata
    xlSheet.

  8. Arresta il progetto e modifica la seguente riga di codice:

    xlSheet.Range(Cells(1,1),Cells(10,2)).Value = "Hello"
    
    

    Modificare la riga di codice in modo che sia simile alla riga di codice seguente.

    xlSheet.Range(xlSheet.Cells(1,1),xlSheet.Cells(10,2)).Value = "Hello"
    
    
  9. Eseguire di nuovo il programma. Tieni presente che puoi eseguire il codice più volte senza ricevere un messaggio di errore.

Riferimenti

189618 Quando si esegue codice Visual Basic che utilizza l'automazione per controllare Word, è possibile che venga visualizzato il messaggio di errore "Errore di runtime '-2147023174" (800706ba) o l'errore di runtime '462'"