2012-05-16 23 views
6

In una subroutine, voglio aprire una cartella di lavoro, leggerne una parte e chiuderla.
Per qualche ragione, ottengo un errore:Errore durante la chiusura di una cartella di lavoro aperta in VBA Userform

Run-time error '1004': 

Method 'Close' of object _Workbook failed 

ho identificato un frammento di codice minima per riprodurre il problema.
Creare un nuovo file excel. In esso, crea un Userform. Su questo, creare un pulsante di comando con il seguente codice di evento Click:

Private Sub CommandButton1_Click() 
    Dim filename As String 
    Dim opened_workbook As Workbook 

    filename = Application.GetOpenFilename() ' User selects valid Excel file 
    Set opened_workbook = Application.Workbooks.Open(filename) 
    ' File operations would occur here 
    opened_workbook.Close ' Exception thrown here 

    MsgBox "If you got here, it worked!" 
    Unload Me 
End Sub 

Ciò che veramente mi ha lasciato perplesso è che questo errore non si verifica con lo stesso codice quando il pulsante di comando non è in un form utente (su una pianura pulsante direttamente sul foglio di lavoro).

Non so nemmeno che altro segnalare o dove cercare di spiegare questo comportamento (oltre a StackOverflow!). Sto scrivendo VBA usando Excel per Mac 2011 e posso passare a Windows Excel 2010 se fa la differenza.

+0

FWIW, il tuo codice sembra funzionare per me su Windows Excel 2010 con un modulo utente (e anche come codice semplice). – stephan

+0

Darn :(Suppongo che dovrei provarlo su Windows me stesso, anche se mi piacerebbe vedere una soluzione che funziona sia per Windows che per Mac. –

risposta

7

Sì, in Excel 2011, è un errore (Non documentato - Non ho ancora trovato una documentazione per esso). Devi modificare leggermente il codice. Prova questo

Private Sub CommandButton1_Click() 
    Dim filename As String 
    Dim opened_workbook As Workbook 

    filename = Application.GetOpenFilename() ' User selects valid Excel file 
    Set opened_workbook = Application.Workbooks.Open(filename) 

    Unload Me 

    opened_workbook.Close  

    MsgBox "If you got here, it worked!" 
End Sub 
+0

Che bug stupido. Spostato il comando 'Scarica Me' sotto il 'Dim ' dichiarazioni e funziona Grazie (ho anche aggiunto alcune linee 'ScreenUpdating = False' /' True' per renderlo un po 'più fluido). –

0

Ho avuto questo problema esatta su Excel 11 su Mac (Ha funzionato bene Excel 2013 su Windows), solo l'errore si è verificato in un sub modulo che è stato chiamato dal form. Se qualcuno (come me) sta tentando di utilizzare il metodo workbook.close da una sub/funzione in un modulo (o un'altra posizione) che non si trova all'interno del Form utente stesso, non è possibile utilizzare "Me". 'Io' è utilizzabile solo all'interno del codice UserForm stesso.

Invece di "Unload Me" utilizzare la funzione di scaricamento e il nome del Form utente.

Unload UserFormName 
Problemi correlati