Macros en excel

Hola a tod@s , tengo una serie de datos en una hoja de calculo llamada TEMPORAL :
(Como no puedo pegar una imagen os escribo los registros)
A1=MANUEL GARCIA VAZQUEZ
B1=GRAN CANARIA, 25
C1=983584785
A2=PEPE VAZQUEZ VAZQUEZ
B2=LA ALAMEDA, 20
C2=983554545
A3=ANA GARCIA LOPEZ
B3=LA PAZ, 23
C3=983584652
A4=LAURA VAZQUEZ VAZQUEZ
B4=ROSALEDA, 25
C4=983123785
Y simplemente quería pasar esos datos a otra hoja de calculo (en el mismo libro) llamada ETIQUETAS de forma que me quedasen eses datos puestos de la siguiente forma :
B3=MANUEL GARCIA VAZQUEZ
B4=GRAN CANARIA, 25
B5=983584785
E3=PEPE VAZQUEZ VAZQUEZ
E4=LA ALAMEDA, 20
E5=983554545
B8=ANA GARCIA LOPEZ
B9=LA PAZ, 23
B10=983584652
E8=LAURA VAZQUEZ VAZQUEZ
E9=ROSALEDA, 25
E10=983123785
Es decir poner los mismos datos de cada persona (nombre, dirección y teléfono) separados y puestos en el orden que aparecen abajo.Eso cuando tengo 3 o 4 registros es viable hacerlo a mano pero cuando tengo 1000 o 2000 obviamente ya no.
¿He pensado en programar una macro en Visual Basic que me copiase desde el primer al último registro de la hoja de calculo llamada TEMPORAL y me la copiase en la hoja llamada ETIQUETAS pero no se como hacerlo porque si se de Visual Basic pero nunca he hecho macros en Excel?. ¿A alguien se le ocurre como hacerlo? Gracias anticipadas

1 respuesta

Respuesta
1
Lo que pasa es que esta mal una cosa.
CUANDO TU PASAS LAS LINEAS DE COMANDOS Y EL CÓDIGO QUE COMPILASTE EN LA MACRO "Macro5", que supongo esta en un modulo,
cuando pasas esto, no a un modulo, sino a la sección correspondiente a los códigos y los comandos de una "Hoja", cualquiera,
esto no funciona, no me preguntes porque, pero no funciona; pero se como arreglarlo.
Tu en ultimas tienes esto:
Sub Macro5()
procedimiento
End Sub
'Esta macro que supongo esta en un "Modulo"
Y Esto:
Private Sub Cmdgenerarinforme_Click()
procedimiento
End Sub
'Que supongo no esta en un "Modulo".
Lo que debes hacer es dejar el "procedimiento" y tu código en la "Macro5", y llamas esta macro desde "Cmdgenerarinforme_Click", de esta forma:
Private Sub Cmdgenerarinforme_Click()
Application.Run "Macro5"
End Sub
'Esta es la unica de codigo que debe tener "Cmdgenerarinforme_Click".
Ya lo he resuelto ! solo me queda un pequeño detalle ... ¿cómo puedo saber el numero de filas que tengo insertadas en una hoja de calculo?
Ya me han resuelto el error !. Una cosa para finalizar. Cuando inserto el procedimiento (que hace lo que te había comentado en el primer mensaje) en una macro;es decir;dentro de un modulo:
Sub Macro5()
procedimiento
End Sub
Me funciona y me pega los registros en la hoja ETIQUETAS, pero cuando asocio el procedimiento al evento Click de un botón en la hoja TEMPORAL :
Private Sub Cmdgenerarinforme_Click()
procedimiento
End Sub
No me funciona. Al pulsar el botón Cmdgenerarinforme me da un error en tiempo de ejecución. El procedimiento es el siguiente :
Dim Charhoja1 As Long
Dim Numhoja1 As String
Dim Charhoja2 As Long
Dim Numhoja2 As String
Dim Contfilas As Long
Dim Contreg As Integer
Dim PoscolumB As Boolean
Dim Totalfilas As Long
Contfilas = 1
Contreg = 1
Charhoja1 = 65
Numhoja1 = 2
Charhoja2 = 66
Numhoja2 = 3
PoscolumB = True
Totalfilas = ActiveSheet.Range("A65536").End(xlUp).Row
While Contfilas < Totalfilas
While Contreg <= 3
Sheets("TEMPORAL").Select
Range(Chr(Charhoja1) + Numhoja1).Select
Application.CutCopyMode = False
Selection.Copy
Sheets("ETIQUETAS").Select
Range(Chr(Charhoja2) + Numhoja2).Select
ActiveSheet.Paste
Charhoja1 = Charhoja1 + 1
Numhoja2 = Val(Numhoja2) + 1
Contreg = Contreg + 1
Wend
Charhoja1 = 65
Numhoja1 = Val(Numhoja1) + 1
Contreg = 1
If PoscolumB Then
Charhoja2 = Charhoja2 + 3
Numhoja2 = Val(Numhoja2) - 3
PoscolumB = False
Else
Charhoja2 = 66
Numhoja2 = Val(Numhoja2) + 3
PoscolumB = True
End If
Contfilas = Contfilas + 1
Wend
Sheets("ETIQUETAS").Select
El error que me da es el siguiente :
Se ha producido el error '1004' en tiempo de ejecución
Fallo en el método Select de la clase Range.
La linea de codigo donde se produce el error es la siguiente :
Range(Chr(Charhoja2) + Numhoja2).Select
¿Por qué se produce ese error?
...
...
Private Sub Cmdgenerarinforme_Click()
Application.Run "Macro5"
End Sub
'Esta es la unica LINEA de codigo que debe tener "Cmdgenerarinforme_Click".
Vamos a ver si te entendí bien, lo que quieres es que t... d3 y t... e3 se vayan desplazando por la columna donde están las ciudades y sus cod. Pues.
Osea que nesesitarias en lugar de esta instrucción:
Temporal! D3
Seria esta otra que la reemplazaría:
Sheets("hoja3"). Cells(3, 4)
Pero como lo que lo que quieres es que sea variable, tendrías que hacer un ciclo que vaya recorriedno las columnas, por decir algo, que vaya recorriendo las filas, porque imagino que las ciudades están en la columna 'd', que seria equivalente a 4; osea:
Sheets("hoja3"). Cells(i, 4)
'donde i es la variable de incremento
'y para temporal!e3 seria:
Sheets("hoja3").Cells(i, 5)
Por ejemplo, para colocar en la columna A, los valores de hoja temporal, debidamente concatenados,
seria algo así:
sub asdasd()
dim i as integer
i = 1
while Sheets("hoja3").Cells(i, 4) <> ""
Cells(i, 1).Value ="=CONCATENATE(""PROVINCIA: "",Sheets("hoja3").Cells(i, 4),"" CODIGO POSTAL:"",Sheets("hoja3").Cells(i, 5))"
i = i + 1
wend
end sub
'pd:
'hoja3 equivale a tu hoja temporal

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas