Visual Basic - Macro en excel

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil

Macro en excel

Publicado por Ana (26 intervenciones) el 21/04/2022 09:01:25
Estoy generando una macro con los siguientes datos:

Sub grabardatos()

'Definir objeto a utilizar

Dim hojaInicio As Worksheet

Dim hojaFin As Worksheet

Set hojaInicio = Worksheets("formulario_P")

Set hojaFin = Worksheets("BBDD_FORM_P")


hojaInicio.Range("D15").Copy

hojaFin.Range("D2:D100").PasteSpecial Paste:=xlPasteValues

En este ultimo paso ¿Cómo puedo pedirle que solo copie datos hasta al ultima fila?. Se trata de un rango sobre el que conozco la celda de inicio pero no la celda del final porque no se cuantas líneas se van a incorporar al fichero. No doy con ello ¿me podéis echar una mano
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana
Val: 1.259
Plata
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Macro en excel

Publicado por Antoni Masana (558 intervenciones) el 21/04/2022 14:48:02
Añade esto:

1
2
3
4
5
6
7
8
9
10
11
Sub grabardatos()
    ' --- Definir objeto a utilizar
    Dim hojaInicio As Worksheet
    Dim hojaFin As Worksheet
 
    Set hojaInicio = Worksheets("formulario_P")
    Set hojaFin = Worksheets("BBDD_FORM_P")
 
    hojaInicio.Range("D15").Copy
    hojaFinal.Cells(2, "D").End(xlDown).Offset(1, 0).Select
    hojaFin.Range("D2:D" & ActiveCell.Row).PasteSpecial Paste:=xlPasteValues

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Macro en excel

Publicado por Ana (26 intervenciones) el 21/04/2022 16:51:50
Muchas gracias. Entiendo que esto lo hago de la misma manera en todas las columnas que tengo (7 mas) quedando asi la macro:
hojaInicio.Range("D16").Copy
hojaFinal.Cells(2, "E").End(xlDown).Offset(1, 0).Select
hojaFin.Range("E2:E" & ActiveCell.Row).PasteSpecial Paste:=xlPasteValues

¿seria asi por cada columna?.

Gracias!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.259
Plata
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Macro en excel

Publicado por Antoni Masana (558 intervenciones) el 21/04/2022 17:22:44
Correcto.
No se que es exactamente lo que haces o lo que copias pero por el ejemplo seria así en cada columna.
Tampoco se si la columna donde copias esta con datos o vacia, no ser en base a que columna se determina las filas a copiar, tampoco ser que es lo que realmente quieres hacer con la macro ni porque lo haces y me queda la duda de si realmente funciona lo que te he puesto, a ver, funcionar funciona pero quizás no es lo que deseas que haga.

1
Cells(2, "E").End(xlDown).Offset(1, 0).Select

Esto se coloca en la primera celda de la columna E que este vacía y esto:

1
ActiveCell.Row

Te dice en que fila estas.

Si no funciona sube un libro de ejemplo y explica que es lo que quieres hacer.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Macro en excel

Publicado por Ana (26 intervenciones) el 21/04/2022 19:31:15
Tienes razón disculpa. Lo que necesito con la macro es cargar datos de una hoja excel (hoja consulta BO) a otra hoja del mismo libro (BBDD) pero solo de unas columnas determinadas no de toda y desconociendo los rangos porque cada vez los datos que se carguen en la hoja de consultas serán distintos y de filas (rangos) menores o de mayor numero de registros.
Adjunto el excel para ver si asi me explic mejor.
Muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Macro en excel

Publicado por Ana (26 intervenciones) el 21/04/2022 18:21:30
A la hora de cargar datos a una plantilla excel de un rango de inicio ¿la formula para la macro seria parecida? En este caso el supuesto que he hecho es el siguiente pero si la carga es syperior a 200 no se cargan los registros que faltan ¿Cómo puedo quitar este limite?

Sub cargardatosconsulta()

'Definir objeto a utilizar

Dim hojaInicio As Worksheet

Dim hojaFin As Worksheet

Set hojaInicio = Worksheets("Consulta_BO_P")

Set hojaFin = Worksheets("BBDD_FORM_P")


hojaInicio.Range("B2:B200").Copy

hojaFin.Range("A2:A200").PasteSpecial Paste:=xlPasteValues


hojaInicio.Range("C2:C200").Copy

hojaFin.Range("B2:B200").PasteSpecial Paste:=xlPasteValues

Gracias!!!. Con esto de los rangos sin limitaciones no acabo de dar con la formula.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.259
Plata
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Macro en excel

Publicado por Antoni Masana (558 intervenciones) el 22/04/2022 16:11:31
Quizas es esto lo que necesitas:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Sub Actualizar_Consulta()
    Dim Hoja_Origen As Worksheet, Fila_Origen As Long, _
        Hoja_Destin As Worksheet, Fila_Destin As Long
 
    Set Hoja_Origen = Worksheets("Consulta_BO")
    Set Hoja_Destin = Worksheets("BBDD")
 
    ' ---&--- Busca la primera fila vacia del destino
    Hoja_Destin.Cells(2, "A").End(xlDown).Offset(1, 0).Select
    Fila_Destin = ActiveCell.Row
 
    ' ---&--- Copia mientras encuentre datos en la columna A
    Fila_Origen = 2
    While Hoja_Origen.Cells(Fila_Origen, "A") <> Empty
        Hoja_Destin.Cells(Fila_Destin, "A") = Hoja_Origen.Cells(Fila_Origen, "A") ' -- Documento Identificación
        Hoja_Destin.Cells(Fila_Destin, "B") = Hoja_Origen.Cells(Fila_Origen, "B") ' -- Nombre Empresa
        Hoja_Destin.Cells(Fila_Destin, "C") = Hoja_Origen.Cells(Fila_Origen, "C") ' -- Codigo Cliente
        Hoja_Destin.Cells(Fila_Destin, "M") = Hoja_Origen.Cells(Fila_Origen, "D") ' -- Servicio Contratado
        Hoja_Destin.Cells(Fila_Destin, "N") = Hoja_Origen.Cells(Fila_Origen, "E") ' -- Telefono
        Hoja_Destin.Cells(Fila_Destin, "O") = Hoja_Origen.Cells(Fila_Origen, "F") ' -- Fecha Activación
        Hoja_Destin.Cells(Fila_Destin, "R") = Hoja_Origen.Cells(Fila_Origen, "G") ' -- Producto 1
        Hoja_Destin.Cells(Fila_Destin, "T") = Hoja_Origen.Cells(Fila_Origen, "H") ' -- Producto 2
        Fila_Origen = Fila_Origen + 1
        Fila_Destin = Fila_Destin + 1
    Wend
End Sub

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Macro en excel

Publicado por Ana (26 intervenciones) el 23/04/2022 11:56:28
Me salta error en el metodo select de la clase Range en la indicación
Hoja_Destin.Cells(2, "A").End(xlDown).Offset(1, 0).Select
He cambiado por xlUp pero tampoco funciona. Es como si no reconociera la celda
Lo he intentado poniendo
ActiveSheet.Cells(2, 1).Offset(1, 0).Select
ActiveSheet.Range("A2").Offset(5, 4).Select
y tampoco
Muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.259
Plata
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Macro en excel

Publicado por Antoni Masana (558 intervenciones) el 24/04/2022 13:40:11
Prueba esto

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Sub Actualizar_Consulta()
    Dim Hoja_Origen As Worksheet, Fila_Origen As Long, _
        Hoja_Destin As Worksheet, Fila_Destin As Long
 
    Set Hoja_Origen = Worksheets("Consulta_BO")
    Set Hoja_Destin = Worksheets("BBDD")
 
    ' ---&--- Busca la primera fila vacia del destino
    Fila_Destin = 2
    While Hoja_Destin.Cells(Fila_Destin, "A") <> EMPTY
        Fila_Destin = Fila_Destin + 1
    Wend
 
    ' ---&--- Copia mientras encuentre datos en la columna A
    Fila_Origen = 2
    While Hoja_Origen.Cells(Fila_Origen, "A") <> Empty
        Hoja_Destin.Cells(Fila_Destin, "A") = Hoja_Origen.Cells(Fila_Origen, "A") ' -- Documento Identificación
        Hoja_Destin.Cells(Fila_Destin, "B") = Hoja_Origen.Cells(Fila_Origen, "B") ' -- Nombre Empresa
        Hoja_Destin.Cells(Fila_Destin, "C") = Hoja_Origen.Cells(Fila_Origen, "C") ' -- Codigo Cliente
        Hoja_Destin.Cells(Fila_Destin, "M") = Hoja_Origen.Cells(Fila_Origen, "D") ' -- Servicio Contratado
        Hoja_Destin.Cells(Fila_Destin, "N") = Hoja_Origen.Cells(Fila_Origen, "E") ' -- Telefono
        Hoja_Destin.Cells(Fila_Destin, "O") = Hoja_Origen.Cells(Fila_Origen, "F") ' -- Fecha Activación
        Hoja_Destin.Cells(Fila_Destin, "R") = Hoja_Origen.Cells(Fila_Origen, "G") ' -- Producto 1
        Hoja_Destin.Cells(Fila_Destin, "T") = Hoja_Origen.Cells(Fila_Origen, "H") ' -- Producto 2
        Fila_Origen = Fila_Origen + 1
        Fila_Destin = Fila_Destin + 1
    Wend
End Sub

Es la solución clásica que utilizo yo y que siempre funciona

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.259
Plata
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Macro en excel

Publicado por Antoni Masana (558 intervenciones) el 25/04/2022 19:34:15
Una pregunta: ¿Que versión de Excel tienes?

Porque es raro que no funcione esto:

1
Hoja_Destin.Cells(2, "A").End(xlDown).Offset(1, 0).Select

Quizás es algo nuevo y no funciona en todas las versiones.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Macro en excel

Publicado por Ana (26 intervenciones) el 26/04/2022 16:03:20
la version que me aperece es la 2202 ¿te refieres a esto?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Macro en excel

Publicado por Ana (26 intervenciones) el 26/04/2022 18:35:12
WINDOWS 10 ¿deberia funcionar no?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Macro en excel

Publicado por Ana (26 intervenciones) el 03/05/2022 19:15:36
Hola. Sin incluir este parámetro, Hoja_Destin.Cells(2, "A").End(xlDown).Offset(1, 0).Select, que me daba error, si que funciona, tarda un poco más pero parece más fiable y sin limites de rangos. Muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar