VBA excel copiar celda con hipervínculo
Resuelto
grandjean
-
grandjean -
grandjean -
Bonjour à tous,
Estoy trabajando en una base de clientes. En los datos de los clientes, por supuesto, tengo el sitio web.
Logro generar el hipervínculo hacia el sitio del cliente, pero la rutina coloca el resultado no en mi base de clientes (B_Client), sino en la pestaña que gestiona la numeración (Num_An), en la celda C4.
He intentado con Anchor = sheets("B_Client").range("P" & lig), sin éxito
Supongo que la celda activa siempre es la C4 de Num_An.
Si alguien pudiera ayudarme... he buscado un poco en internet, sin éxito hasta ahora.
Aquí está el comienzo de mi macro, para más precisión (estoy en Excel 2003)
Sub Creación_Cliente()
'creación del número de cliente
Dim NumCliente As Integer
Worksheets("Num_An").Select
Range("C4").Select
NumCliente = Worksheets("Num_An").Range("C4").Value
NumCliente = NumCliente + 1
Worksheets("Num_An").Range("C4").Value = NumCliente
'identificar una línea libre y copiar los datos (C_Client = formulario de entrada & B_Client = Base de datos)
Dim lig As Integer
With Sheets("B_Client")
lig = .Columns("A").Find("", .Range("A3"), xlValues).Row
.Cells(lig, "A").Resize(1, 27) = Application.Transpose(Sheets("C_Client").Range("C2:C28").Value)
.Range("A3:AA" & lig).Sort .Range("A3")
'creación del hipervínculo del sitio web
Sheets("C_Client").Range("C17").Copy
site = Sheets("C_Client").Range("C17")
Selection = .Range("P" & lig)
Sheets("B_Client").Hyperlinks.Add anchor:=Selection, Address:="http://" & site
End With
Configuración: Windows XP / Safari 535.1
Estoy trabajando en una base de clientes. En los datos de los clientes, por supuesto, tengo el sitio web.
Logro generar el hipervínculo hacia el sitio del cliente, pero la rutina coloca el resultado no en mi base de clientes (B_Client), sino en la pestaña que gestiona la numeración (Num_An), en la celda C4.
He intentado con Anchor = sheets("B_Client").range("P" & lig), sin éxito
Supongo que la celda activa siempre es la C4 de Num_An.
Si alguien pudiera ayudarme... he buscado un poco en internet, sin éxito hasta ahora.
Aquí está el comienzo de mi macro, para más precisión (estoy en Excel 2003)
Sub Creación_Cliente()
'creación del número de cliente
Dim NumCliente As Integer
Worksheets("Num_An").Select
Range("C4").Select
NumCliente = Worksheets("Num_An").Range("C4").Value
NumCliente = NumCliente + 1
Worksheets("Num_An").Range("C4").Value = NumCliente
'identificar una línea libre y copiar los datos (C_Client = formulario de entrada & B_Client = Base de datos)
Dim lig As Integer
With Sheets("B_Client")
lig = .Columns("A").Find("", .Range("A3"), xlValues).Row
.Cells(lig, "A").Resize(1, 27) = Application.Transpose(Sheets("C_Client").Range("C2:C28").Value)
.Range("A3:AA" & lig).Sort .Range("A3")
'creación del hipervínculo del sitio web
Sheets("C_Client").Range("C17").Copy
site = Sheets("C_Client").Range("C17")
Selection = .Range("P" & lig)
Sheets("B_Client").Hyperlinks.Add anchor:=Selection, Address:="http://" & site
End With
Configuración: Windows XP / Safari 535.1
Enlaces relacionados:
- vba excel copiar filas con condición
- Macro Excel VBA y copiar pegar entre libro(s)
- VBA: Copiar valores de celdas en otra hoja
- Copiar una celda con hipervínculo
- VBA Excel: copiar un dato de listbox a una celda
- Fórmula de Excel para crear un hipervínculo mediante concatenación: `=HYPERLINK(CONCATENATE("http://www.ejemplo.com/", A1), "Texto del enlace")`
6 respuestas
-
Hola,
Selection es una palabra clave de VBA, no puedes usarla como nombre de variable.
Y puedes simplificar tu código, tienes .select y .copy innecesarios.
eric -
He intentado reemplazar por Sel, como me sugieres. Sin éxito. También probé con Anchor.
Mi archivo depurado está disponible en:
http://www.cijoint.fr/cjlink.php?file=cj201109/cijY07VilL.xls
Explico el funcionamiento en la página de inicio.
Te agradezco de antemano por tu ayuda. Aprovecha el sol de este hermoso día.
Jean -
re,
tu código corregido:Sub Creación_Cliente() 'creación del número de cliente Dim NumCliente As Integer NumCliente = [Num_An!C4] + 1 [Num_An!C4] = NumCliente 'identificar una línea libre y copiar los datos (C_Cliente = formulario de ingreso & B_Cliente = Base de datos) Dim lig As Integer With Sheets("B_Cliente") lig = .Columns("A").Find("", .Range("A3"), xlValues).Row .Cells(lig, "A").Resize(1, 27) = Application.Transpose(Sheets("C_Cliente").Range("C2:C28").Value) .Range("A3:AA" & lig).Sort .Range("A3") 'creación del enlace hipertexto del sitio web Sheets("B_Cliente").Hyperlinks.Add anchor:=.Range("P" & lig), Address:="http://" & [C_Cliente!C17] End With 'ordenar los artículos en orden ascendente Range("A3:AA3").Select Range(Selection, Selection.End(xlDown)).Select Selection.Sort Key1:=Range("A3"), Order1:=xlAscending, Header:=xlNo, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom 'vaciar el formulario With Sheets("C_Cliente") .Range("c2").ClearContents .Range("c5:c10").ClearContents .Range("c13").Value = "FRANCIA" .Range("C23").Value = "FRANCIA" End With 'volver a la hoja Base Clientes Sheets("B_Cliente").Activate Range("A2").Select End Sub
He hecho el enlace hipertexto y también modificado un poco las primeras líneas (5 líneas en lugar de 2).
Cuando estés en un With Sheets("B_Cliente"), hay que reemplazar el nombre de la hoja por un . : anchor:=.Range(...
eric -
¡Muchas gracias, Eric, porque tu solución funciona perfectamente. ¡Es bueno saberlo!
Sin embargo, tengo un problema con la clasificación.
He borrado todos los registros de mi base de datos para empezar desde cero.
Cuando ingreso al primer cliente, la información se coloca bien en la primera línea, excepto que el sitio web aparece en la segunda línea.
Cuando ingreso al segundo cliente, todo vuelve a la normalidad.
Sin embargo, después creé un cliente que se inserta entre los dos primeros, y ahí, el sitio web se pega bien pero sin el enlace.
¿Podría ser que el hecho de que comience en la línea 3 y no en la línea 2 provoque un error?
Si no, tal vez mi método de clasificación no sea el adecuado.
Como habrás notado, soy principiante en VBA, que me parece genial. He encontrado algunos tutoriales interesantes, ¡pero uno se llena rápido la vista! -
Re,
Ya que no haré .find para la primera línea libre, sino:
lig = .[A65536].end(xlup).row + 1
(es el equivalente a ctrl + flecha arriba, partiendo desde abajo, que te lleva a la última línea llena. +1 para la siguiente. Solo es una cuestión de velocidad, pero está bien que hayas visto el .find, te servirá de nuevo ;-) ))
Luego debes pegar todo: datos y enlace.
Solo después puedes ordenar (tienes un .sort que se presenta por ahí, lig ya no apunta a la línea correcta...)
eric -
Gracias por tu ayuda, Eric. Me costó un poco encontrar el origen del problema. Efectivamente, el hechizo era de más.
¡Todo funciona bien ahora!
Puedo comenzar las siguientes fases.
Jean