Macro de Excel abre libro copia datos y cierra libro





En el post copia  datos, abre otro libro y pega datos se presentó un ejemplo de macro de excel, diseñada en VBA, que copiaba los datos del libro de excel actual, abría otro libro de excel y pegaba los datos que había copiado del libro donde se estaba trabajando, ahora explico algo parecido, pero copiando los datos directamente de un formulario o userform, la idea es que cada usuario tenga en su pc un archivo de excel con una plantilla solamente, dicha plantilla está conformada por un formulario para ingresar datos, tal como se muestra en la imagen.

El formulario de ejemplo está compuesto por dos combobox que uno extrae los datos de los Clientes que están registrados en la hoja2; en cambio el combobox2 al inicializarse el formulario se agregan dos items solamente, sin necesidad de recorrer las filas e ir agregando registro por registro hasta que se llegue a la última fila con datos como en el caso del combobox1.

Además de los combobox de los que se hablaba en el párrafo anterior el formulario de ejemplo está presenta tres textbox para capturar datos y dos botones de comando, uno para cerrar el formulario y otro para guardar los datos cargados en los combobox y textbox.

Antes de seguir recomiendo leer un excelente libro sobre Excel que te ayudará operar las planillas u hojas de cálculo, haz click acá, si quieres aprender sobre Excel, en inglés, entonces debes hacer click here. Si lo que necesitas es aprender o profundizar sobre la programación de macros con VBA este es unos de los mejores cursos on line que he visto en internet.

  

La programación de la Macro de Excel realizada en VBA, para el botón que realiza  la función de cerrar el formulario es muy simple, Unload Me,  en el botón de comando guardar se concentra la mayor parte del código, una vez cargados los datos; en este ejemplo, en caso de haber algún control vacío, hace que salga un msgbox avisando que se deben completar todos los campos, luego el procedimiento de VBA, abre el libro, que en este caso se encuentra en una carpeta compartida, guarda los datos de los combobox y textbox y luego guarda el  libro, haciendo foco en el combobox1 para seguir con la siguiente carga de datos. Haciendo click en  la imagen podrás agrandarla y ver una primera impresión del libro.

Se debe tener en cuenta a los fines de la utilización del ejemplo, que cuando se descarga el mismo, se baja un archivo comprimido con dos archivos de excel; en uno esta la plantilla, que se observa en la imagen, con el formulario para ingreso de datos y otro archivo, denominado libro4, en donde guarda los datos el formulario; aquí se debe tener la precaución de cambiar el código que está en el botón "SAVE" del formulario, básicamente es modificar la dirección en donde la macro va a buscar el libro y luego va a guardar el archivo llamado libro4.

Este es el códigos que se debe adaptar por la dirección correcta del libro donde cada uno guardó el archivo de ejemplo bajado y denominado libro4:

Application.Workbooks.Open "C:\Users\MyNotebook\Documents\libro4.xlsx"

Este ejemplo de macro es bastante útil cuando existen varios usuarios que cargan o ingresan datos sobre una misma base, por ello el libro con la base de datos se guarda en una carpeta compartida para que todos tengan acceso y en la PC de cada usuario se debe cargar un archivo liviano que contiene solamente el formulario de ingreso de datos, también se puede implementar cuando se desea guardar datos en cualquier otro archivo que no sea el archivo actual desde el cual se ejecuta la macro.

Al abrir el libro de Excel primero se ejecuta un procedimiento de VBA  que se encuentra en ThisWorkbook, está línea de código llama a otro procedimiento que se encuentra en  el Módulo 1, el cual procede a mostrar el UserForm1, que contiene los combobox y cuadros de texto de los cuales venimos hablando.

Una explicación más detallada y gráfica de la macro presentada se muestra en el vídeo que se muestra seguidamente, recomiendo observar para una más fácil comprensión de la macro; suscribe a nuestra web desde la parte superior derecha de la página ingresando tu mail y a nuestro canal de You Tube para recibir en tu correo vídeos explicativos sobre macros interesantes, como por ejemplo Como cerrar libro dependiendo de fecha de caducidadbuscar en listbox mientras escribes en textboxComo conectar Excel con Word crear archivo e insertar textoComo crear un autonumerico en Excel y muchos ejemplos más.









Código que se inserta en ThisWorkbook del libro de Excel, descarga el ejemplo para verlo en funcionamiento.


Private Sub Workbook_Open()
show
End Sub


Código que se inserta en un módulo
Sub show()
UserForm1.show
End Sub


Código que se inserta en el formulario
Private Sub CommandButton1_Click()

Dim uf As String
Dim importe As Currency
 Application.ScreenUpdating = False

If ComboBox1 = Empty Or TextBox1 = Empty Or TextBox2 = Empty Or TextBox3 = Empty Or ComboBox2 = Empty Then
MsgBox ("Debe completar todos los campos"), vbCritical, "AVISO"
ComboBox1.SetFocus
Exit Sub
End If

'Abrimos el libro donde se va a copiar

Application.Workbooks.Open "C:\Users\MyNotebook\Documents\libro4.xlsx"  'Cambiar por la dirección correcta del libro en la PC

'determines last row with data
uf = Sheets("Hoja1").Range("A" & Rows.Count).End(xlUp).Row
uf = uf + 1
importe = TextBox3.Value
Sheets("hoja1").Cells(uf, 1) = ComboBox1
Sheets("hoja1").Cells(uf, 2) = TextBox1
Sheets("hoja1").Cells(uf, 3) = TextBox2
Sheets("hoja1").Cells(uf, 4) = importe
Sheets("hoja1").Cells(uf, 5) = ComboBox2


'Cierra libro guardando cambios sin preguntar
Workbooks("libro4.xlsx").Close True

ComboBox1 = Clear
TextBox1 = Clear
TextBox2 = Clear
TextBox3 = Clear
ComboBox2 = Clear
ComboBox1.SetFocus
Application.ScreenUpdating = True

End Sub

Private Sub CommandButton2_Click()
Unload Me
End Sub

Private Sub UserForm_Initialize()
Application.ScreenUpdating = False
ComboBox1.Clear
Sheets("hoja2").Select
Range("A2").Select
While ActiveCell <> Empty
ComboBox1.AddItem ActiveCell
ActiveCell.Offset(1, 0).Select
Wend


ComboBox2.Clear
ComboBox2.AddItem ("CANCELLED")
ComboBox2.AddItem ("PENDING")
Sheets("hoja1").Select
Application.ScreenUpdating = True
End Sub







CLICK para descargar en ejemplo en forma gratuita, si te fue de utilidad puedes INVITARME UN CAFÉ y de esta manera ayudar a seguir manteniendo la página.



CLICK to download free example, If this post was helpful INVITE ME A COFFEE and so help keep up the page.


Si te gustó por favor compártelo con tus amigos
If you liked please share it with your friends