Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: Rutlhess en 06 de Junio 2015, 03:34

Título: Abrir Excel con Visual Basic Guardar, cerrar y salir desde VBA y Excel
Publicado por: Rutlhess en 06 de Junio 2015, 03:34
Saludos a todos, tengo el siguiente problema, diseñe un formulario para cargar sus datos en excel, no pretendo que se muestre excel, para eso use el codigo siguiente:

Código: [Seleccionar]
Private Sub Workbook_Open()
     Application.visible = False
     UserForm1.Show
End Sub

el problema es que no quiero que el usuario tenga acceso al libro de excel, y con el fin de que al cerrar el formulario se cierre y guarde los cambios añadí lo siguiente:

Código: [Seleccionar]
Private Sub Workbook_BeforeClose(Cancel As Boolean)
     ActiveWorkbook.Close savechanges:=True
     ThisWorkbook.Close
     Application.Quit
End Sub

Realmente no sé si esta correcto, o bien ubicado, el problema es que al cerrar el formulario me dí cuenta que Excel sigue abierto en segundo plano y si abro nuevamente el formulario me aparece un mensaje que dice "el archivo que esta intentando abrir ya se esta ejecutando" o algo similar y en ocasión de mostrarme el formulario me muestra es el libro con su contenido... como soluciono este error?

espero haberme explicado de manera clara...
Título: Re:Guardar, cerrar y salir desde VBA y Excel
Publicado por: César Krall en 08 de Junio 2015, 08:25
Hola no veo el código donde haces la apertura del excel, creo que no lo has pegado. ¿Estás usando Visual Basic 6? Para evitar que excel continue corriendo tienes que cerrar todo en orden inverso a como lo fuiste abriendo.

He encontrado este ejemplo que usa dos textbox y dos command buttons

Código: [Seleccionar]
'Para declarar estas variables antes hay que añadir una referencia
'a microsoft excel 'xx' object library utilizando los menús.

'you need two text boxes and two command buttons
'on the form, an excel file in c:\book1.xls

Dim xl As New Excel.Application
Dim xlsheet As Excel.Worksheet
Dim xlwbook As Excel.Workbook

Private Sub Command1_Click()
'the benifit of placing numbers in (row, col) is that you
'can loop through different directions if required. I could
'have used column names like "A1" 'etc.

    Text1.Text = xlsheet.Cells(2, 1) ' row 2 col 1
    Text2.Text = xlsheet.Cells(2, 2) ' row 2 col 2

'No olvidar hacer esto o no será posible volver a abrir
'book1.xls de nuevo hasta que se reinicie el computador.
    xl.ActiveWorkbook.Close False, "c:\book1.xls"
    xl.Quit
End Sub

Private Sub Command2_Click()
    xlsheet.Cells(2, 1) = Text1.Text
    xlsheet.Cells(2, 2) = Text2.Text
    xlwbook.Save

'No olvidar hacer esto o no será posible volver a abrir
'book1.xls de nuevo hasta que se reinicie el computador.
    xl.ActiveWorkbook.Close False, "c:\book1.xls"
    xl.Quit
End Sub

Private Sub Form_Load()
    Set xlwbook = xl.Workbooks.Open("c:\book1.xls")
    Set xlsheet = xlwbook.Sheets.Item(1)
End Sub

Private Sub Form_Unload(Cancel As Integer)
    Set xlwbook = Nothing
    Set xl = Nothing
End Sub