Programacion en Hyperlinks

Visualizador

New Member
Joined
Mar 6, 2009
Messages
26
Hola que tal Estimados!!!!

Recien ingresado al foro.

Yo, ignoro sobre la funcion hyperlinks en VBA, pero se que se podrian hacer cosas interesantes en VBA.

Me gustaria saber si se puede programar un Hyperlink, que por medio de el texto que escribamos en una celda excel, busque facturas escaneadas, dentro en un folfer que se llama facturas que se encuentra dentro de un servidor.

Vamos, seria asi:

en un libro de ventas, en una celda, pongo 2114, que el hyperlink reconozca que es 2114, y que la busque dentro de ese folder de facturas escaneadas.

Pero una cosa, ese folder de facturas tiene: sulfolders con el nombre de los clientes, y esos folder de los clientes, tienen subfolders que son las unidades, ya que se reparan trailers.

Un ejemplo practico seria:

Ubicados en el libro de ventas, celda "X", escribo 2114, la direccion es:
S:Datos 2009\Facturas\Pedro Sanchez (Folder con el nombre del cliente)\2020(folder con el numero de unidad)\2114.PDF

Pero dependiendo de el numero y el folder en que se encuentre. Sera posible eso????? yo lo veo como una incognita.

Saludos!!!!!!
 
Yo podría hacer la tarea con cualquier de las estructuras de bucle que mencioné arriba. Pero escogemos uno -- en este caso favor use un FOR/NEXT.
 
Upvote 0

Excel Facts

What is the last column in Excel?
Excel columns run from A to Z, AA to AZ, AAA to XFD. The last column is XFD.
Hola que tal!


Antes que nada, una veaz mas la tardanza. Pero son los problemas laborales. A parte que en mi casa no tengo internet, y mi computadora recien la formatee, y no tengo office. Pero bien

Maestro Aqui tengo algo que espero y sea el comienzo por lo menos:

Code:
Sub Ejemplo_Proyecto()
Dim Casilla_Inicial As String
Dim i As Integer
Dim Fila As Integer, Columna As Integer
Casilla_Inicial = "C1"
ActiveSheet.Range(Casilla_Inicial).Activate
Fila = ActiveCell.Row
Columna = ActiveCell.Column
For i = 1 To 10
ActiveSheet.Cells(Fila, Columna).Value = "Vinculo"
Fila = Fila + 1
Next i
End Sub

Mire un ejemplo que habla sobre celdas, y nomas lo que hice fue tratar de acomodarlo a mis necesidades. Espero y con esto podamos empezar. Si no favor de explicarme las correciones necesarias. O si no es el ejemplo necesario.

Una vez mas disculpas por la tardanza. Saludos!!!!!!!
 
Last edited by a moderator:
Upvote 0
Ahora soy yo quien tiene que pedir discuplas por haber tardado. Adapté el código de usted un poco aquí
Code:
Sub Ejemplo_Proyecto2()
    
    Const c_strDirCeldaInic As String = "D1"
    
    Dim i As Integer
    
    For i = 1 To 10
        Range(c_strDirCeldaInic).Offset(i) = "Vinculo"
    Next i
        
End Sub
Corre lo a la par del suyo. Note la diferencia en la filas en las dos. ¿Comprende el por qué la diferencia?

Ahora, el bucle que usted hizo es fijo - siempre corre diez veces. Trate de cambier el bucle para que el número de veces que corre el bucle corresponde al número de filas con datos en las columnas A o B.
 
Upvote 0
Hola que tal!!!

Vaya, el suyo esta mas simplificado y tal vez menos complejo

La primera curiosidad que tengo sobre el archivo es que ya no uso DIM, sino CONST. c_strDirCeldaInic, es lo mismo que yo tengo Casilla_Inicial, cierto?
Esta macro funciona para todas las hojas, o nomas en la que estamos trabajando, o cual es el rango aqui?

Aun no me queda muy claro esa propiedad OFFSET, a lo que entiendo es que tiene que ver algo con el rango cierto. En sus palabras, que vendria siendo esa propiedad?

Creo que la propiedad OFFSET, es la clave que ocupo para hacer que el bucle funcione con las celdas o rangos que tienen valor, cierto?

Vaya, creo que despues de tanto tiempo, vamos encontrando pistas.

Gracias por las ensenanzas.

Otra cosa, como se ponen los "Code Tags"?
 
Upvote 0
La primera curiosidad que tengo sobre el archivo es que ya no uso DIM, sino CONST. c_strDirCeldaInic, es lo mismo que yo tengo Casilla_Inicial, cierto?
Sí, es el mismo mono con el mismo rabo. La cosa es con hileras (strings) o números que siempre van a tener un valor específico, es mejor agruparlos en el inicio de la rutina. [O si se van a salir usados en varias rutinas en el inicio de del módulo.] Y dado que el valor de tal "variable" no cambia, no es una variable sino un constante. Entonces es mejor definirlo como un constante que como una variable. Y esto se llama "números mágicos" en términos de programación y es mejor tenerlos agrupados arriba en un solo lugar porque tienen la maña de cambiar de vez en cuando y si está arriba como constante uno cambia la definición del constante y ¡zas! termina. Si uno lo tiene metido allí en el fondo de la rutina, muchas veces en varios lugares, entonces tiene que hacer un "buscar y reemplazar (y rezar)".

Esta macro funciona para todas las hojas, o nomas en la que estamos trabajando, o cual es el rango aqui?
Así como está escrito en este momento, va a hacer los cambios en la hoja activa. Pero funcionará en cualquiera hoja, siempre y cuando sea la activada. El hecho de que estamos usando range(___) y no .range(___) es lo que hace que funcione así.
Aun no me queda muy claro esa propiedad OFFSET, a lo que entiendo es que tiene que ver algo con el rango cierto. En sus palabras, que vendria siendo esa propiedad?
Offset hace un desplazamiento por x filas o columnas. O sea corre esto
Code:
Sub Pintar()
    Dim rngCelda As Excel.Range
 
    Set rngCelda = Range("A1")
 
    rngCelda.Interior.Color = vbYellow
    rngCelda.Offset(0, 5).Interior.Color = vbBlue
    rngCelda.Offset(3, 0).Interior.Color = vbRed
    rngCelda.Offset(8, 8).Interior.Color = vbMagenta
End Sub
¿Ya ves qué está pasando con OFFSET?

Creo que la propiedad OFFSET, es la clave que ocupo para hacer que el bucle funcione con las celdas o rangos que tienen valor, cierto?
No, la clave está en la propiedad CurrentRegion. Investique esta.

Otra cosa, como se ponen los "Code Tags"?
Si va al editor avanzado, hay un botón con un # (tiene que haber escogido un editor avanzado en las opciones de usuario - es la última opción). También se puede escribirlos con poner
Code:
 [ c o d e ] my code goes here [ / c o d e ]
quitando los espacios sobrantes que puse.
 
Upvote 0
Hola que tal!

Vaya, cada dia estoy mas sorprendido. Uso: Dim RngCelda As Excel.Range? se puede usar como varable? mm, algo nuevo para mi.

OffSet, dice que se desplaza por filas o columnas, cierto? pero entonces los rangos que tiene, en el programa son: Primero, A1, despues tiene: 0,5. 3,0. y 8,8. Que son las celdas: A1,F1,A4 y I7. Como es que el proyecto toma esos rangos?

Otra cuestion: Cual es la funcion de la propiedad SET??

Una vez mas, saludos!!!
 
Upvote 0
Eso de Excel.Range es hábito, nada más. La cosa es que dentro de Word también hay un objeto con el nombre "range". Así que si uno está automatizando una mezcla de aplicaciones le puede salir otro tipo de RANGE que lo esperado. El «Excel.» especifica que uno quiere el objecto "range" de la biblioteca de Excel. Seguro que el 99,9 por ciento del tiempo no habrá ningún peligro de un accidente con usar la forma breve. La cosa es trato de formar hábitos buenos mientras escribo código y así ni cuenta me doy a veces que he hecho una cosilla rara como eso.
Como es que el proyecto toma esos rangos?
No tiene mucho que ver con el proyecto. Como dije, usted necesita explorar CURRENTREGION. El ejemplo que puse fue porque usted dijo que estaba teniendo dificultades comprendiendo qué hace OFFSET.
Otra cuestion: Cual es la funcion de la propiedad SET??
Se usa SET para asignar un OBJECTO a un variable. Hace treinta años cuando ni tuvimos objetos, el uso de LET fue común. Todavía se puede usar LET. Compare LET y SET aquí
Code:
dim rngCelda1 as excel.range, rngCelda2 as excel.range
set rngCelda1 = range("A1")     '// asigna el objeto celda A1 a la variable rngCelda1
set rngCelda2 = range("A2")     '// asigna el objeto celda A2 a la variable rngCelda2 
let rngCelda1 = "Greg"          '// LET va a accessar la propiedad VALUE del objeto
                                '// rngCelda1 y dar VALUE el valor de "Greg"
let rngCelda2 = rngCelda1       '// ahora A2 tiene el mismo valor que A1
set rngCelda2 = rngCelda1       '// ahora rngCelda2 *ES* rngCelda1
let rngCelda2 = "Visualizador"  '// ahora A1 cambia de valor, no A2
 
Last edited:
Upvote 0
Hola que tal!!!!

Bien, dice que esto no tiene que ver nada con el proyecto verdad? perfecto, yo mas bien preguntaba como este ejercicio, por medir de la propiedad OFFSET, toma esos valores, o referencias.

CurrentRegion, nueva tarea para investigar, muy bien.

Ah y una ves mas disculpas por la tardanza.
 
Upvote 0
Si no me equivoco la tarea que queda pendiente es la de mi post #43
Ahora, el bucle que usted hizo es fijo - siempre corre diez veces. Trate de cambier el bucle para que el número de veces que corre el bucle corresponde al número de filas con datos en las columnas A o B.
 
Upvote 0
Hola que tal!!!

Mil disculpas por haberme retrasado en los deberes. La verdad que hoy me siento un poco alegre por que en lo que estaba atrasado de trabajo ya avance un 90%.

Por eso aprovecho para seguir aprendiendo de su sabiduria. Pero espero que no sea muy tarde y que usted siga dispuesto a ensenarme. Mil disculpas.

Espero y esto sea algo de lo que usted me pide:

Tengo esta pequena investigacion.

Sub Asigna_Vinculos()
For Each c In Range("A1:A3")
ActiveSheet.Hyperlinks.Add c, c.Value, c.Value
Next c
End Sub

Que si no hay datos en el mencionado rango, no se proporciona el link. Espero que esto sea por lo menos algo, sino, tendre que poner mas empeno!

Saludos y mil disculpas por lo ya mencionado!!!!!:)
 
Upvote 0

Forum statistics

Threads
1,216,203
Messages
6,129,490
Members
449,512
Latest member
Wabd

We've detected that you are using an adblocker.

We have a great community of people providing Excel help here, but the hosting costs are enormous. You can help keep this site running by allowing ads on MrExcel.com.
Allow Ads at MrExcel

Which adblocker are you using?

Disable AdBlock

Follow these easy steps to disable AdBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the icon in the browser’s toolbar.
2)Click on the "Pause on this site" option.
Go back

Disable AdBlock Plus

Follow these easy steps to disable AdBlock Plus

1)Click on the icon in the browser’s toolbar.
2)Click on the toggle to disable it for "mrexcel.com".
Go back

Disable uBlock Origin

Follow these easy steps to disable uBlock Origin

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back

Disable uBlock

Follow these easy steps to disable uBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back
Back
Top