propiedades para libro cerrar excel vba excel-vba excel-vba-mac

para - vba excel



Error al cerrar un libro abierto en VBA Userform (2)

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

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

En una subrutina, quiero abrir un libro de trabajo, leerlo y cerrarlo.
Por alguna razón, me sale un error:

Run-time error ''1004'': Method ''Close'' of object _Workbook failed

Identifiqué un fragmento de código mínimo para reproducir el problema.
Crea un nuevo archivo de Excel. En él, crea una forma de usuario. Sobre eso, crea 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 ocurre con el mismo código cuando el botón Comando no está en una forma de usuario (en un botón simple 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.


Tuve este problema exacto en Excel 11 en Mac (Worked fine Excel 2013 en Windows), solo se produjo el error en un sub módulo al que se llamó desde el UserForm. Si alguien (como yo) intenta 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 ''Descargarme'', use la función de descarga y el nombre de su UserForm.

Unload UserFormName