2012-05-16 23 views
6

En una subrutina, quiero abrir un libro, leerlo y cerrarlo.
Por alguna razón, me sale un error:Error al cerrar un libro abierto en VBA Userform

Run-time error '1004': 

Method 'Close' of object _Workbook failed 

he identificado un fragmento de código mínima para reproducir el problema.
Crea un archivo Excel nuevo. En él, crea una forma de usuario. Por eso, crear un botón de comando con el siguiente código de 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 

Lo que realmente me deja perplejo es que este error no sucede con el mismo código cuando el botón de comando no está en un formulario de usuario (en un llano botón directamente en la hoja de trabajo).

Ni siquiera sé qué más informar o dónde buscar para explicar este comportamiento (¡además de StackOverflow!). Estoy escribiendo VBA usando Excel para Mac 2011 y puedo moverme a Windows Excel 2010 si hace la diferencia.

+0

FWIW, su código parece funcionar para mí en Windows Excel 2010 con un formulario de usuario (y también como código simple). – stephan

+0

Malo :(Supongo que debería probarlo en Windows ahora mismo. Aunque me encantaría ver una solución que funcione tanto para Windows como para Mac. –

Respuesta

7

Sí, en Excel 2011, es un error (no documentado - Todavía no he encontrado una documentación para él). Tienes que modificar ligeramente el código. Prueba este

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

¡Qué error tan tonto! Movió el 'Unload Me' por debajo del' Dim' declaraciones y funciona. ¡Gracias! (También agregué algunas líneas 'ScreenUpdating = False' /' True' para suavizar un poco). –

0

tuve este problema exacto en Excel 11 en Mac (Excel 2013 funcionó bien en Windows), sólo se produjo el error en un sub módulo que se llama desde el formulario de usuario. Si alguien (como yo) está tratando de usar el método workbook.close desde un sub/función en un módulo (u otra ubicación) que no está dentro del UserForm, no puede usar 'Me'. 'Me' solo se puede utilizar dentro del código de UserForm.

En lugar de 'Unload Me' use la función de descarga y el nombre de su UserForm.

Unload UserFormName 
Cuestiones relacionadas