Saltar al contenido

Macro para adicionar registros de una hoja a una base de datos nueva


Recommended Posts

copiar el boton no significa que la macro se copia, cada que copies el boton debes entrar al boton y darle el nombre la macro que se va a ejecutar en este caso copia2, das click con el boton derecho sobre el boton y seleccionas ver codigo, si esta vacia te va a aparecer asi:

el numero se va a ir incrementado cada que hagas una copia

Private Sub CommandButton2_Click()
End Sub

tu agregas lo siguiente

Private Sub CommandButton2_Click()
copia2
End Sub

y la macro tiene que estar en el libro que estes usando sino te va a marcar error

Enlace a comentario
Compartir con otras webs

Dr. Hyde, buenas tardes

Realice otra prueba, fue la siguiente:

1. Copie los datos que tenemos en el archivo  ("Prueba Copia de Registros sin Filas en Blanco (2)")  al archivo original donde tengo los días.

2. Ejecute el Botón Resumir y funciona.

3. Según esto el formato del copiar las filas tiene algo que ver?

Gracias

 

Enlace a comentario
Compartir con otras webs

Dr. Hyde, disculpe por tanta molestia, pero de tanto hacer pruebas, borrar y volver a colocar todo, volvi a ejecutar y si funciono, me copio los registros, que FELICIDAD, usted si sabe de esto, ojala pudiera aprender de esa manera

Pero como siempre una pregunta, al copiar los datos en la Base de Datos, porque no respeta el formato de los campos de la  de la Base de Datos?

1. Le envío copia como me quedan los datos en la Base de datos, son los 3 últimos.

2. Las dos Macros como quedaron asi, o sera que se pueden realizar en un solo Botón?

PRIMERA MACRO - BOTON DE COPIAR REGISTROS DONDE NO HAYA FILAS EN BLANCO.

Option Base 1
Sub copiar()
' Desabilita los campos de Nombre Px y Tratamiento
    Application.EnableEvents = False
    Application.ScreenUpdating = False
' Desprotege la hoja
Cells.Select
    Range("C1").Activate
    ActiveSheet.Unprotect
' Empieza el traslado de los registros sin filas en blanco
Set datos = Range("a320").CurrentRegion
Set datos = datos.Rows(1).Resize(149, datos.Columns.Count)

Set origen = datos.Offset(1, 0).Resize(datos.Rows.Count - 1, datos.Columns.Count)
Range("a500").Resize(origen.Rows.Count, origen.Columns.Count).ClearContents
Set destino = Range("a500").Resize(origen.Rows.Count, origen.Columns.Count)
ReDim matriz(datos.Rows.Count, datos.Columns.Count)

a = 1
For Each Fila In origen.Rows
    fil = Fila.Row - origen.Row + 1
    f = Fila
    If f(1, 4) = Empty Then GoTo siguiente
    
    For i = 1 To origen.Columns.Count
        matriz(a, i) = f(1, i)
    Next i
    a = a + 1
siguiente:
Next Fila

Range(destino.Address) = matriz
origen.Rows(0).Copy destino.Rows(0)
'destino.Select
' Protege la hoja
 Cells.Select
    Range("C1").Activate
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
' Habilita campos de Nombre Px y Tratamientos
    Application.ScreenUpdating = True
    Application.EnableEvents = True
End Sub

SEGUNDA MAGRO - BOTON COPIAR REGISTROS DE UNA HOJA A LA BASE DE DATOS EXTERNA

Sub copia2()
' Desabilita los campos de Nombre Px y Tratamiento
    Application.EnableEvents = False
    Application.ScreenUpdating = False
' Desprotege la hoja
Cells.Select
    Range("C1").Activate
    ActiveSheet.Unprotect
Set hd = Workbooks("0. Base_Datos_Acumulada.xlsm")
Set destino = hd.ActiveSheet.Range("a1").CurrentRegion

Set ho = ActiveWorkbook
Set origen = ho.ActiveSheet.Range("a500").CurrentRegion

c = origen.Rows(1).Interior.ColorIndex

If c = 15 Then
    Set origen = origen.Rows(2).Resize(origen.Rows.Count - 1, origen.Columns.Count)
End If

origen.Copy destino.Rows(destino.Rows.Count + 1)
' Protege la hoja
 Cells.Select
    Range("C1").Activate
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
' Habilita campos de Nombre Px y Tratamientos
    Application.ScreenUpdating = True
    Application.EnableEvents = True

End Sub

No tengo palabras para agradecerle todo lo que me ha aguantado, he aprendido, pero cada vez veo que se menos.

 

Muchas gracias y mil gracias.

 

0. Base_Datos_Acumulada - copia.xlsm

Enlace a comentario
Compartir con otras webs

Dr. Hyde, buenos días

Lastima le escribí anoche informando que ya me funciona, pero queria perfeccionarlo, no se porque no paso el correo. 

1. Relaciono Macro Copiar Registros sin filas en Blanco 

  • Nombre del Boton o Macro: "Copiar"

Sub copiar()
' Desabilita los campos de Nombre Px y Tratamiento
    Application.EnableEvents = False
    Application.ScreenUpdating = False
' Desprotege la hoja
Cells.Select
    Range("C1").Activate
    ActiveSheet.Unprotect
' Empieza el traslado de los registros sin filas en blanco
Set datos = Range("a320").CurrentRegion
Set datos = datos.Rows(1).Resize(149, datos.Columns.Count)

Set origen = datos.Offset(1, 0).Resize(datos.Rows.Count - 1, datos.Columns.Count)
Range("a500").Resize(origen.Rows.Count, origen.Columns.Count).ClearContents
Set destino = Range("a500").Resize(origen.Rows.Count, origen.Columns.Count)
ReDim matriz(datos.Rows.Count, datos.Columns.Count)

a = 1
For Each Fila In origen.Rows
    fil = Fila.Row - origen.Row + 1
    f = Fila
    If f(1, 4) = Empty Then GoTo siguiente
    
    For i = 1 To origen.Columns.Count
        matriz(a, i) = f(1, i)
    Next i
    a = a + 1
siguiente:
Next Fila

Range(destino.Address) = matriz
origen.Rows(0).Copy destino.Rows(0)
'destino.Select
' Protege la hoja
 Cells.Select
    Range("C1").Activate
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
' Habilita campos de Nombre Px y Tratamientos
    Application.ScreenUpdating = True
    Application.EnableEvents = True
End Sub

2. Relaciono Macro que Copia Registros de una hoja a un archivo Externo

  • Nombre del Boton o Macro: "Copiar2"

Sub copia2()
' Desabilita los campos de Nombre Px y Tratamiento
    Application.EnableEvents = False
    Application.ScreenUpdating = False
' Desprotege la hoja
Cells.Select
    Range("C1").Activate
    ActiveSheet.Unprotect
Set hd = Workbooks("0. Base_Datos_Acumulada.xlsm")
Set destino = hd.ActiveSheet.Range("a1").CurrentRegion

Set ho = ActiveWorkbook
Set origen = ho.ActiveSheet.Range("a500").CurrentRegion

c = origen.Rows(1).Interior.ColorIndex

If c = 15 Then
    Set origen = origen.Rows(2).Resize(origen.Rows.Count - 1, origen.Columns.Count)
End If

origen.Copy destino.Rows(destino.Rows.Count + 1)
' Protege la hoja
 Cells.Select
    Range("C1").Activate
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
' Habilita campos de Nombre Px y Tratamientos
    Application.ScreenUpdating = True
    Application.EnableEvents = True

End Sub

3. Porque cuando copia los registros al archivo de la Base de datos o cuando ejecuta la primera macro no que copia los registros sin filas en blanco, no los copia con el formato?

  • Adjunto Archivo de muestra, son los últimos tres registros, que no quedan con el formato de la Base de Datos.

 

Nuevamente no tengo sino palabras de agradecimiento y de saber como me puedo capacitar, ojala aprendiendo por lo menos del 10% que usted sabe, para entender el manejo de todas estas rutinas, macros, instrucciones, etc...

0. Base_Datos_Acumulada - copia.xlsm

Enlace a comentario
Compartir con otras webs

Hace 20 horas, Oscar Arroyave dijo:

Dr. Hyde, disculpe por tanta molestia, pero de tanto hacer pruebas, borrar y volver a colocar todo, volvi a ejecutar y si funciono, me copio los registros, que FELICIDAD, usted si sabe de esto, ojala pudiera aprender de esa manera

Pero como siempre una pregunta, al copiar los datos en la Base de Datos, porque no respeta el formato de los campos de la  de la Base de Datos?

1. Le envío copia como me quedan los datos en la Base de datos, son los 3 últimos.

2. Las dos Macros como quedaron asi, o sera que se pueden realizar en un solo Botón?

PRIMERA MACRO - BOTON DE COPIAR REGISTROS DONDE NO HAYA FILAS EN BLANCO.

Option Base 1
Sub copiar()
' Desabilita los campos de Nombre Px y Tratamiento
    Application.EnableEvents = False
    Application.ScreenUpdating = False
' Desprotege la hoja
Cells.Select
    Range("C1").Activate
    ActiveSheet.Unprotect
' Empieza el traslado de los registros sin filas en blanco
Set datos = Range("a320").CurrentRegion
Set datos = datos.Rows(1).Resize(149, datos.Columns.Count)

Set origen = datos.Offset(1, 0).Resize(datos.Rows.Count - 1, datos.Columns.Count)
Range("a500").Resize(origen.Rows.Count, origen.Columns.Count).ClearContents
Set destino = Range("a500").Resize(origen.Rows.Count, origen.Columns.Count)
ReDim matriz(datos.Rows.Count, datos.Columns.Count)

a = 1
For Each Fila In origen.Rows
    fil = Fila.Row - origen.Row + 1
    f = Fila
    If f(1, 4) = Empty Then GoTo siguiente
    
    For i = 1 To origen.Columns.Count
        matriz(a, i) = f(1, i)
    Next i
    a = a + 1
siguiente:
Next Fila

Range(destino.Address) = matriz
origen.Rows(0).Copy destino.Rows(0)
'destino.Select
' Protege la hoja
 Cells.Select
    Range("C1").Activate
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
' Habilita campos de Nombre Px y Tratamientos
    Application.ScreenUpdating = True
    Application.EnableEvents = True
End Sub

SEGUNDA MAGRO - BOTON COPIAR REGISTROS DE UNA HOJA A LA BASE DE DATOS EXTERNA

Sub copia2()
' Desabilita los campos de Nombre Px y Tratamiento
    Application.EnableEvents = False
    Application.ScreenUpdating = False
' Desprotege la hoja
Cells.Select
    Range("C1").Activate
    ActiveSheet.Unprotect
Set hd = Workbooks("0. Base_Datos_Acumulada.xlsm")
Set destino = hd.ActiveSheet.Range("a1").CurrentRegion

Set ho = ActiveWorkbook
Set origen = ho.ActiveSheet.Range("a500").CurrentRegion

c = origen.Rows(1).Interior.ColorIndex

If c = 15 Then
    Set origen = origen.Rows(2).Resize(origen.Rows.Count - 1, origen.Columns.Count)
End If

origen.Copy destino.Rows(destino.Rows.Count + 1)
' Protege la hoja
 Cells.Select
    Range("C1").Activate
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
' Habilita campos de Nombre Px y Tratamientos
    Application.ScreenUpdating = True
    Application.EnableEvents = True

End Sub

No tengo palabras para agradecerle todo lo que me ha aguantado, he aprendido, pero cada vez veo que se menos.

 

Muchas gracias y mil gracias.

 

0. Base_Datos_Acumulada - copia.xlsm

 

Enlace a comentario
Compartir con otras webs

Buenas tardes, es la siguiente:

1. Cuando copio las filas no me quedan con el formato que viene la base de datos

2. Tengo dos botenes, asi como me lo explicaste, 

  • El primero "Copiar" y copia las filas sin ninguna en blaco
  • El segundo "Copia2" que pasa los registros a la Base de Datos Externa.

La pregunta es, se puede hacer en uno solo?

Gracias nuevamente, en verdad sos un verdadero genio, lo felicito.

Enlace a comentario
Compartir con otras webs

para el formato y ya no moverle a las macros copia esta macro donde tienes las dos macros para copiar, esta le daran formato en el libro de acumulados

Sub formato()
Set hd = Workbooks("0. Base_Datos_Acumulada - copia.xlsm")
Set destino = hd.Sheets(1).Range("a1").CurrentRegion
    
    destino.Borders(xlDiagonalDown).LineStyle = xlNone
    destino.Borders(xlDiagonalUp).LineStyle = xlNone
    With destino.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With destino.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With destino.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With destino.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With destino.Borders(xlInsideVertical)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With destino.Borders(xlInsideHorizontal)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
End Sub
 

Enlace a comentario
Compartir con otras webs

Dr. Hyde, buenos días

Realice lo que me escribió y funciono perfecto, pero hay un detalle, los campos o celdas que tienen numeros enteros, separados de dos decimales, no quedan con el formato, es decir:

77,999 queda 77999

Las columnas son de la "J" a la "AD"

En cambio de de la "AJ" a la "AM" si quedan con el formato de miles.

Porque? no se, analice la Macro y no veo el motivo.

Te relaciono la Macro por si ves donde esta el porque copia unas columnas con formato de miles y las otras no:

Option Base 1
Sub copiar()
' Desabilita los campos de Nombre Px y Tratamiento
    Application.EnableEvents = False
    Application.ScreenUpdating = False
' Desprotege la hoja
Cells.Select
    Range("C1").Activate
    ActiveSheet.Unprotect
' Empieza el traslado de los registros sin filas en blanco
Set datos = Range("a320").CurrentRegion
Set datos = datos.Rows(1).Resize(149, datos.Columns.Count)

Set origen = datos.Offset(1, 0).Resize(datos.Rows.Count - 1, datos.Columns.Count)
Range("a500").Resize(origen.Rows.Count, origen.Columns.Count).ClearContents
Set destino = Range("a500").Resize(origen.Rows.Count, origen.Columns.Count)
ReDim matriz(datos.Rows.Count, datos.Columns.Count)

a = 1
For Each Fila In origen.Rows
    fil = Fila.Row - origen.Row + 1
    f = Fila
    If f(1, 4) = Empty Then GoTo siguiente
    
    For i = 1 To origen.Columns.Count
        matriz(a, i) = f(1, i)
    Next i
    a = a + 1
siguiente:
Next Fila

Range(destino.Address) = matriz
origen.Rows(0).Copy destino.Rows(0)
'destino.Select
' Protege la hoja
 Cells.Select
    Range("C1").Activate
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
' Habilita campos de Nombre Px y Tratamientos
    Application.ScreenUpdating = True
    Application.EnableEvents = True
End Sub
 

De resto funciono perfectamente, estoy muy contento, pero si no se puede Dr, tranquilo, no sabes como me ayudo, y cada vez lo pulo màs, pero con la ayuda de ustedes, porque solo era imposible hacerlo.

Gracias

Enlace a comentario
Compartir con otras webs

Dr. Hyde, buenas tardes

Quedo EXCELENTE, funciona a la perfección.

Todos los formatos quedaron "Ok"

La copia de los registros en la Base de Datos Externa los copia muy bien.

Gracias, muchisimas gracias.

Verdaderamente el que sabe, sabe, lo Felicito.

 

PODEMOS DAR POR TERMINADO ESTE TEMA

Disculpeme si lo moleste demasiado, pero sin usted nunca lo habría realizado.

Gracias

Enlace a comentario
Compartir con otras webs

Dr Hyde, no crea que le escribo solo para que me ayude, también para FELICITARLO y agradecerle que me ha soportado tanto.

Como escribí anteriormente podemos dar por Cerrado este Tema.

Voy a continuar mejorando la hoja, ahora quiero que cuando se posicione en el nombre tome una Base de datos de Nombre, lo voy a intentar hacer.

 

Gracias nuevamente

Enlace a comentario
Compartir con otras webs

  • Silvia bloqueó este tema

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

  • 96 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Archivos

  • Estadísticas de descargas

    • Archivos
      177
    • Comentarios
      90
    • Revisiones
      27

  • Crear macros Excel

  • Mensajes

    • Hi Trate de ver que hacían las fórmulas en cuestión pero a su libro le falta o le faltan hojas, por lo que solo podría participar con un par de ideas en general. Lo que entiendo es que según el valor de B3 en C3 debe poner una fórmula u otra, así que es posible que si combina DIRECCION() con INDIRECTO() pueda intercambiar de una fórmula a otra. =SI(B3="Xl",INDIRECTO(DIRECCION(3,5)),SI(O(B3=1,B3=2,B3=3),INDIRECTO(DIRECCION(4,5)),"")) Otra forma sería poner nombre a esas fórmulas en el cuadro de nombres para que las pueda mandar llamar a una o a la otra según el resultado de B3. Por favor tome en cuenta, es solo una idea.
    • Buenas tardes! Tengo el siguiente código: Private Sub btnCargaBancos_Click() Dim TasaCompra, TasaVenta As Double Dim InvBanesco, InvVzla, MontoBanesco, MontoVzla As Double Dim TasaDiaBan, TasaDiaVzla, TasaActual As Double 'Inversion = Val(txtInversion.Text) InvBanesco = Val(CDbl(txtInverBanesco.Text)) InvVzla = Val(CDbl(txtInverVzla.Text)) TasaCompra = Val(CDbl(txtTasaCompra.Text)) TasaVenta = Val(CDbl(txtTasaVenta.Text)) MontoBanesco = (InvBanesco / TasaCompra) * (1 - 0.18 / 100) * (TasaVenta * (1 - 0.18 / 100)) MontoVzla = (InvVzla / TasaCompra) * (1 - 0.18 / 100) * (TasaVenta * (1 - 0.18 / 100)) TasaDiaBan = (MontoBanesco / InvBanesco) * (1 - 0.055)      TasaDiaVzla = (MontoVzla / InvVzla) * (1 - 0.055) If TasaDiaBan < TasaDiaVzla Then     TasaActual = TasaDiaBan Else     TasaActual = TasaDiaVzla End If MontoBanesco = FormatNumber(MontoBanesco, 2, True, vbFalse) MontoVzla = FormatNumber(MontoVzla, 2, True, vbFalse) TasaActual = FormatNumber(TasaActual, 5, True, False) txtBcoBanesco.Value = MontoBanesco txtBcoVenezuela.Value = MontoVzla txtTasaDiaria.Value = TasaActual End Sub   Como se puede apreciar InvBanesco ,  InvVzla , TasaCompra y TasaVenta, son valores que introduce el usuario a través de los respectivos cuadros de texto. Tengo los siguientes problemas: a. Las fórmulas no se ejecutan correctamente (pareciese que no reconociese los números entrados vía cuadros de texto). b. Al darle valor cero (0) a cualquiera de los valores de InvBanesco o  InvVzla, me genera un error en TasaDiaBan o TasaDiaVzla (según sea el caso), aunque, como se puede apreciar, debería generar un valor cero (0). Como dije en mi presentación estoy empezando en esto de la codificación...y quiero aprender de Uds! Agradezco su ayuda! Nota: lamentablemente el fichero es mas grande de lo permitido y no pude anexarlo.  
    • Hola buenas tardes. En una hoja plantilla donde realizo diferentes consultas de datos. tengo ya establecido dos formulas diferentes con función SI y buscar. estos buscan diferentes rangos de datos y recibendiferentes resultados. Cada formula varia según una palabra o numero  ejemplo si pongo Xl pone la formula 1 y si pongo cualquier numero entre 1 y 3 pone la segunda formula. Lo que necesito hacer es que si en una celda de la columna B3 pongo XL debería de considerar la formula 1 y si pusiera el numero 1 me pondría la segunda formula, dentro de la misma formula. Ya agregue la función SI($C3="Xl",Formula1.. Pero no me funciona, espero me puedan ayudar.   Muchas gracias Mariano   Formula doble si en celda existe.xlsx
    • Sub control2558() Application.ScreenUpdating = False Dim I As Integer I = 4 While Sheets("FT-ADF-2558").Cells(I, 102) <> "" Sheets("FT-ADF-2558").Cells(6, 82) = Sheets("FT-ADF-2558").Cells(I, 102) Dim NombreArchivo, RutaArchivo As String NombreArchivo = "Hoja Control " & Sheets("FT-ADF-2558").Cells(I, 102) RutaArchivo = ActiveWorkbook.Path & "\" & NombreArchivo & ".xlsm" Dim NuevoLibro As Workbook Set NuevoLibro = Workbooks.Add Sheets("FT-ADF-2558").Copy Before:=NuevoLibro.Sheets(1) NuevoLibro.SaveAs Filename:=RutaArchivo NuevoLibro.Close I = I + 1 Wend MsgBox ("Proceso generado con éxito") Application.ScreenUpdating = True End Sub  
    • Ese error es porque no existe la hoja 10 con ese nombre, entonces cámbialo por FT-ADF-2558
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.