Formulario de captura en Excel que guarda datos en otro archivo de Excel

En un artículo anterior vimos cómo tener un formulario de captura que guarda datos en otra hoja de Excel, que por cierto el video asociado a ese tutorial tiene hasta la fecha 56 mil vistas en Youtube, lo cual lo hace un tutorial que le ha sido útil a bastantes personas.

Ahora, tomando el mismo ejemplo le hice algunas modificaciones en las macros para que ahora los datos se capturen en un formulario que esté en un archivo de Excel y que los datos capturados se guarden en otro archivo de Excel.

Ver video Capturar datos y guardarlos en otro archivo

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Guardar datos en otro archivo de Excel

Tenemos un archivo de Excel en el cual, en la primera hoja tenemos un formulario para capturar datos. En la hoja Captura contamos con dos botones:

    1. Guardar datos en otro archivo.
    2. Guardar datos en otra hoja (mismo archivo).

Capturar datos y guardarlos en el mismo archivo o en otro archivo.

Figura 1. Capturar datos y guardarlos en el mismo archivo o en otro archivo.

En caso de presionar el botón Guardar datos (otro archivo), los datos se capturarán en el archivo llamado Datos – EXCELeINFO.xlsx, mismo que debe guardarse en la misma carpeta del archivo de captura.

Los datos se guardarán en otro archivo, que debe estar en la misma carpeta.

Figura 2. Los datos se guardarán en otro archivo, que debe estar en la misma carpeta.

Guardar en el mismo archivo, pero en otra hoja

En caso de presionar el botón Guardar datos (mismo archivo), los datos se guardarán en la hoja Datos del mismo archivo de captura.

Guardar datos en hoja de Excel.

Figura 3. Guardar datos en hoja de Excel.

Código vba de la macro. Guardar en otro archivo

El siguiente código debe ir en un módulo normal y será llamado por el botón Guardar datos (otro archivo).

Option Explicit
'EXCELeINFO
'MVP Sergio Alejandro Campos
'http://www.exceleinfo.com
'https://www.youtube.com/user/sergioacamposh

'Guardar datos en otro archivo de Excel
Sub Captura_Datos2()
'Declaración de variables
'
Dim strTitulo As String
Dim Continuar As String
Dim RangoDatos As Range
Dim NuevaFila As Integer
Dim Limpiar As String
Dim HojaDestino
Dim Ruta As String
'
'Declaramos las variables que nos permitirán tener una segunda instancia de Excel
'ejecutándose en segundo plano.
Dim x10 As New Excel.Application
Dim ArchivoDestino As New Excel.Workbook
'
strTitulo = "EXCELeINFO"
'
Continuar = MsgBox("Dar de alta los datos?", vbYesNo + vbExclamation, strTitulo)
If Continuar = vbNo Then Exit Sub
'
'En caso de que el archivo esté en la misma ruta
Ruta = ActiveWorkbook.Path
'
'Abrimos el archivo donde se guardarán los datos.
'Este archivo se abrirá en la instancia de Excel ejecutándose en segundo plano.
'Set ArchivoDestino = x10.Workbooks.Open("C:\ruta\del\archivo\de\datos\Datos - EXCELeINFO.xlsx")
Set ArchivoDestino = x10.Workbooks.Open(Ruta & "\Datos - EXCELeINFO.xlsx")
Set HojaDestino = ArchivoDestino.Worksheets("Datos")
'
'Definimos el rango actual de la hoja Datos
Set RangoDatos = HojaDestino.Cells(1, 1).CurrentRegion
'
'Nueva fila será la fila donde se guardarán los datos nuevos
NuevaFila = RangoDatos.Rows.Count + 1
'La variable HojaDestino será la hoja donde se guardarán los datos.
With HojaDestino
    .Cells(NuevaFila, 1).Value = Date
    .Cells(NuevaFila, 2).Value = Format(Date, "dd")    'Día actual
    .Cells(NuevaFila, 3).Value = Format(Date, "mm")    'Mes actual
    .Cells(NuevaFila, 4).Value = Format(Date, "yy")    'Año actual
    .Cells(NuevaFila, 5).Value = ThisWorkbook.Sheets(1).Range("C6")     'Responsable
    .Cells(NuevaFila, 6).Value = ThisWorkbook.Sheets(1).Range("C9")     'Inventario
    .Cells(NuevaFila, 7).Value = ThisWorkbook.Sheets(1).Range("C12")    'Célula
    .Cells(NuevaFila, 8).Value = ThisWorkbook.Sheets(1).Range("C15")    'V.O.B.O.
    .Cells(NuevaFila, 9).Value = ThisWorkbook.Sheets(1).Range("F9")     'Se reemplaza
    .Cells(NuevaFila, 10).Value = ThisWorkbook.Sheets(1).Range("F12")   'Aplica pago
    .Cells(NuevaFila, 11).Value = ThisWorkbook.Sheets(1).Range("F15")   'Comentarios
End With
'
MsgBox "Alta exitosa.", vbInformation, strTitulo
'
'
'Guardamos el archivo con los datos.
ArchivoDestino.Save
'Cerramos el archivo con los datos.
ArchivoDestino.Close
'Quitamos las referencias a los objetos de la otra instancia de Excel
Set x10 = Nothing
Set ArchivoDestino = Nothing
'
Limpiar = MsgBox("Deseas limpiar los campos de la captura?", vbYesNo, strTitulo)
'
If Limpiar = vbYes Then
    With ActiveWorkbook.Sheets(1)
        .Range("C6").ClearContents
        .Range("C9").ClearContents
        .Range("C12").ClearContents
        .Range("C15").ClearContents
        .Range("F9").ClearContents
        .Range("F12").ClearContents
        'ClearContents no funciona en celda combinada...
        .Range("F15").Value = ""
    End With
Else
End If
'
End Sub

Código vba de la macro. Guardar en otra hoja

El siguiente código debe ir en un módulo normal y será llamado por el botón Guardar datos (mismo archivo).

Option Explicit
'EXCELeINFO
'MVP Sergio Alejandro Campos
'http://www.exceleinfo.com
'https://www.youtube.com/user/sergioacamposh
Sub Captura_Datos()
'Declaración de variables
'
Dim strTitulo As String
Dim Continuar As String
Dim RangoDatos As Range
Dim NuevaFila As Integer
Dim Limpiar As String
'
strTitulo = "EXCELeINFO"
'
Continuar = MsgBox("Dar de alta los datos?", vbYesNo + vbExclamation, strTitulo)
If Continuar = vbNo Then Exit Sub
'
Set RangoDatos = ThisWorkbook.Worksheets("Datos").Cells(1, 1).CurrentRegion
'
NuevaFila = RangoDatos.Rows.Count + 1
'
With ThisWorkbook.Worksheets("Datos")
    .Cells(NuevaFila, 1).Value = Date
    .Cells(NuevaFila, 2).Value = Format(Date, "dd")    'Día actual
    .Cells(NuevaFila, 3).Value = Format(Date, "mm")    'Mes actual
    .Cells(NuevaFila, 4).Value = Format(Date, "yy")    'Año actual
    .Cells(NuevaFila, 5).Value = ThisWorkbook.Sheets(1).Range("C6")     'Responsable
    .Cells(NuevaFila, 6).Value = ThisWorkbook.Sheets(1).Range("C9")     'Inventario
    .Cells(NuevaFila, 7).Value = ThisWorkbook.Sheets(1).Range("C12")    'Célula
    .Cells(NuevaFila, 8).Value = ThisWorkbook.Sheets(1).Range("C15")    'V.O.B.O.
    .Cells(NuevaFila, 9).Value = ThisWorkbook.Sheets(1).Range("F9")     'Se reemplaza
    .Cells(NuevaFila, 10).Value = ThisWorkbook.Sheets(1).Range("F12")   'Aplica pago
    .Cells(NuevaFila, 11).Value = ThisWorkbook.Sheets(1).Range("F15")   'Comentarios
End With
'
MsgBox "Alta exitosa.", vbInformation, strTitulo
'
Limpiar = MsgBox("Deseas limpiar los campos de la captura?", vbYesNo, strTitulo)
'
If Limpiar = vbYes Then
    With ActiveWorkbook.Sheets(1)
        .Range("C6").ClearContents
        .Range("C9").ClearContents
        .Range("C12").ClearContents
        .Range("C15").ClearContents
        .Range("F9").ClearContents
        .Range("F12").ClearContents
        'ClearContents no funciona en celda combinada...
        .Range("F15").Value = ""
    End With
Else
End If
'
End Sub

Descargar los archivos de ejemplo

Descargar el ejemplo Formulario de captura que guarda en otro archivo de Excel.rar

You may also like...