# Programacion en Hyperlinks



## Visualizador (Mar 6, 2009)

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!!!!!!


----------



## Greg Truby (Mar 7, 2009)

Bienvenido a MrExcel. 


Usted no necesita programación de VBA. Existe una fórmula HYPERLINK. Vamos a decir que celda A1 contiene el nombre del usuario y A2 contiene el nombre del archivo, uno podría poner una fórmula así:

=HYPERLINK("C:\users\" &* A1* & "\pictures\b&w\" & *A2*,"Foto")
Que hace el vínculo pero se ve la palabra «foto» en la celda.


----------



## Visualizador (Mar 7, 2009)

Greg Truby said:


> Bienvenido a MrExcel.


 
Gracias por la bienvenida!


Usted no necesita programación de VBA. Existe una fórmula HYPERLINK. Ok hare lo que usted diga 

Vamos a decir que celda A1 contiene el nombre del usuario 
Perdone mi ignorancia, no entiendo muy bien si cuando dice usuario, se refiere al usuario de windows, o a otro tipo de usuario.


y A2 contiene el nombre del archivo, uno podría poner una fórmula así:

=HYPERLINK("C:\users\" &* A1* & "\pictures\b&w\" & *A2*,"Foto")
Tenemos ocupadas la celda A1 y A2, cierto, pero la duda es, en que celda, pondria la formula, en cualquiera menos esas dos?

Que hace el vínculo pero se ve la palabra «foto» en la celda.
Eso es lo que se le conoce como el nombre amigable, cierto?

Una vez mas, disculpe las ignorancias. Espero pueda ayudarme con mi consulta


----------



## Sal Paradise (Mar 19, 2009)

Por ejemplo:

Excel WorkbookAB1Nombre del ClieneteNombre de Archivo2Pedro Sanchez2114.PDF34HYPERLINK:FotoSheet1

Si \2020\ no esta la misma folder/subfolder por cada archivo, puede escribir un tabula para INDEX() y MATCH()

Por ejemplo:
Excel WorkbookAB82114.pdf\2020\2114.pdf96921.jpg\2160\6921.jpg104472.pdf\3634\4472.pdf116417.gif\4279\6417.gif123745.pdf\5164\3745.pdf136781.pdf\6470\6781.pdf144668.jpg\6233\4668.jpg156564.gif\7201\6564.gif168699.pdf\7568\8699.pdf179649.pdf\4809\9649.pdfSheet1

Si cambia la HYPERLINK a:
=HYPERLINK("S:Datos 2009\Facturas\" & A2 & INDEX(B8:B17,MATCH(B2,A8:A17,0)),"Foto")

Puede entrar el folder y el subfolder automaticamente.


----------



## Visualizador (Mar 19, 2009)

Que tal Companero!

Es buena tu respuesta, lo que pasa que mis conocimientos limitados, no entienden como funciona el procedimiento que acabas de escribir.

Lo que no entiendo es si tengo que escribir cada nombre del archivo .pdf en una columna, y luego en otra escribir las columnas, como explicas en el segundo ejemplo.

Bueno, espero continue el entusiasmo por ayudarme, en caso, anexo un archivo, que contiene folder y subfolders.

MEGAUPLOAD - The leading online storage and file delivery service


Para que te des una idea de lo que quiero, que para mi no es cosa facil, a lo mejor para ti si, pero en fin, espero y puedas darme aunque sea un escalon para empezar a subir esta larga escalera.

Saludos y gracias.


----------



## Greg Truby (Mar 19, 2009)

No puedo bajar un archivo aquí en mi trabajo.  Veré si lo puedo hacer hoy por la noche en me casa.


----------



## Visualizador (Mar 19, 2009)

Que tal!

Gracias por volver al tema. No te preocupes, revisalo con calma, y espero puedas darme una respuesta.

Saludos!


----------



## Greg Truby (Mar 19, 2009)

Revisando su archivo veo que cliente puede tener varias carpetas. Por ejemplo *Claroscuro* tiene dos, también *Lumina*. ¿Cómo se sabe en cuál carpeta están tal y tal facturas? ¿O esto también es parte del problema?


----------



## Visualizador (Mar 20, 2009)

Que tal!

Precisamente mi estimado.

Lo que me gustaria es: 

De acuerdo al numero que yo ponga en la celda de excel, del archivo "Sales", que la busque hasta lo mas recondito de todo el folder de facturas, por que como menciono, existen folders, subfolders y subsubfolders.

Se que es algo dificil, pero espero y poco a poco lleguemos a lo esperado.

Para mi, es una incognita. Espero y usted pueda ayudarme.


----------



## Greg Truby (Mar 21, 2009)

Bueno, otros miembros como cgcamal pueden confirmar que por lo general prefiero enseñar a la gente como pescar en vez de estar siempre regalando peces. No me gusta que nuestros miembros se quedan como golfillos mendigando limosna. 

Lo que usted está pidiendo sí es bastante posible con VBA. Sin VBA sería imposible. Si usted está dispuesto remar, estoy dispuesto servir como un faro. Pero sepa que de aquí donde estamos y tener el su proyecto terminado faltarán bastantes posts.


----------



## Visualizador (Mar 6, 2009)

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!!!!!!


----------



## Visualizador (Mar 21, 2009)

Que tal! 

Gracias por la atencion.

Precisamente, eso es lo es que you estoy buscando, una guia o, mejor dicho una persona guia que me diga que hacer. Yo puse el archivo para que me entendieran y sepa de lo que se trata mi proyecto.

En verdad seria muy interesante que usted y otros Foristas, tambien son bienvenidos, me ayudaran a crear mi poyecto. Tiempo? no hay tiempo limite, ni urgencia de terminarlo, mientras mas pasos y mas actividades me de a hacer para aprender, no hay ningun problema. Adelante y rememos juntos!

Tambien entendere que es usted muy ocupado, y que no todo el tiempo sera para mi proyecto, como menciono, prisa, urgencia no habra. Paso por paso aprender mas.

Gracias y saludos!!!!!


----------



## Greg Truby (Mar 22, 2009)

¡Excelente! Empezamos con la fiesta entonces.

Antes de empezar, unos ajustes al diseño de los datos en la hoja. Quite toda la información que no tiene impacto sobre el proyecto. O sea, haga una hoja con solo los números de las facturas en columna A y los nombres de los clientes en columna B.

Ahora paso 1 (y el más sencillo). Haga una rutina, que *por medio de una bucle (loop)* llena columna C con el texto "vínculo" para cada celda que contiene un número de factura en A y un nombre de cliente en B.


----------



## Visualizador (Mar 23, 2009)

Hola que tal!

Gracias por transmitir el entusiasmo.

Bueno, para comenzar la clase tengo un par de preguntitas:

1.- Mire, aqui me entregan las facturas, pero no consecutivas. Ejemplo:

1749,1751,1770,1826,1827,1848,1859,1880,1883,1914,1915,1916,1917,1919,1933,1934,1935.

Pero en otra entrega de facturas me pueden dar asi:

1750, 1765,1768,1810,1815,1830,1845,1850,1875,1910, etc.

O sea, tenemos todas las facturas, pero como se entregan a diferentes empleados, vamos, se reparten, algunos entregan facturas mas rapido que otros, y por eso los numeros se atrazan.

Sera eso un problema para que usted me ayude a elaborar mi proyecto anhelado?

2.- Esa hoja que usted menciona, la tengo que hacer en el mismo libro, o tenemos que empezar con esa hoja, y ya de ahi, partir con lo demas?

Bien, sobre la rutina bucle, o loop usted me puede guiar un poquito? o me lo deja de tarea. Si es asi, ya tengo trabajo para empezar, ja! asi sirve que aprendo mas.

Muchas gracias por sus consejos!!!!
saludos!!!!


----------



## Greg Truby (Mar 23, 2009)

Bueno que tal si gateamos antes de caminar y caminamos antes de correr... :wink:

Eso de consolidar datos de varias hojas sería una tarea más complicada que la que está en nuestro plato ya. 

Asi que enfocamos en hacer un listado de hyperlinks ahora y el otro después. Por el momento vamos a empezar con nuestra hoja ya bien organizada como descrito arriba.

Para eso del bucle sí, una tarea. La forma más sencilla es en un modulo nuevo hacer una rutina de practica como 
	
	
	
	
	
	



```
Sub foo()
    For i = 1 To 2
 
End Sub
```
 y colocar el cursor sobre la "for" y presionar la tecla _F1_ y estudiar los bucles *For / Next* y *For Each / Next.*

También va a necesitar saber sobre variables para rangos, la propiedad *CurrentRegion* y el método *Offset*. Para eso mejor en el VBE teclar _F2_ para abrir el _Object Browser_, seleccionar _Range_ como el class y *CurrentRegion* y *Offset* como miembros y presionar _F1_.


----------



## Visualizador (Mar 24, 2009)

Que tal Maestro!

Otro dia de clase, ja! como decia, si tal vez me acelere un poco. Pero seguire los pasos que usted me diga.

Ya he estado haciendo mi tarea, vaya, esa instruccion, parece que si me va a servir mucho. Solo cuestion de estudiarla. Lo que no me queda muy claro es eso de el "counter", he visto en algunas macros que, despues de *for, *hay una letra, la mayoria es la I, puede ser cualquier letra? Lo de los statements, pregunta: hay se escriben las actividades que va a realizar el procedimiento, o seria otra cosa?

Como dioce, gatear antes de caminar, y caminar antes de correr.

Gracias!

Saludos!


----------



## Greg Truby (Mar 24, 2009)

Aquí hay unos ejemplos de bucles. Además le doy ejemplos de uso de los métodos de rangos *Offset* y *Resize* y tres maneras de como usar un contador para accesar celdas. Y como ves se puede usar cualquier nombre para el contador. Por lo general los contadores son Integer o Long
	
	
	
	
	
	



```
Sub foo()
    Dim i%, intPaso%, lngPasoAtras&
    Range("a1").Resize(10) = Application.Transpose(Array("uno", "dos", "tres", "cuatro", "cinco", _
                                                         "seis", "siete", "ocho", "nueve", "diez"))
    For i = 1 To 10
        Let s = s & Range("A" & i) & vbCr
    Next i
    '// (para hacer la caja más ancha para poder ver el título
    Let s = s & String(30, " ") & vbCr
 
    MsgBox s, vbInformation, "de 1 a 10 yendo x 1"
 
    Let s = vbNullString
    For intPaso = 1 To 10 Step 2
        Let s = s & Cells(intPaso, 1) & vbCr
    Next intPaso
    Let s = s & String(30, " ") & vbCr
 
    '// note que no aparece "diez", solo "nueve"
    MsgBox s, vbInformation, "de 1 a 10 yendo x 2"
    Let s = vbNullString
    For lngPasoAtras = 9 To 0 Step -1
        Let s = s & Range("A1").Offset(lngPasoAtras) & vbCr
    Next lngPasoAtras
    MsgBox s, vbInformation, "de 9 a 0 yendo x -1"
 
End Sub
```


----------



## Visualizador (Mar 26, 2009)

Hola que tal!

un dia mas de estudio!

solo queria informarle que estoy haciendo mi tarea, mis investigaciones respectivas, para que vea que aun estoy interesado en realizar con su ayuda mi proyecto. A parte, cambios en las labores, han hecho que me atrase un poco. Pero ojala y salgamos adelante.

Saludos!!!!


----------



## Visualizador (Mar 26, 2009)

Hola que tal!!!!

Algo que, en el mucho estudio, pero poco avance que he hecho sobre macros y programacion, es que si estas instrucciones o comandos, se logran con la grabadora de macros, o si el programador tiene que escribir manualmente estas instrucciones.  O sea, yo tengo que escribir manualmente, *DIM, *o *FOR TO, FOR EACH, *etc.

Je, la clase del dia.


----------



## Greg Truby (Mar 26, 2009)

La grabadora solamente puede decirle la sintaxis de como acceder tal y tal propiedad o método.

La grabadora no puede hacer bucles [for/next; for each/next; do while/loop; do until/loop; do/loop while; do/loop until; while/wend] ni bifurcaciones de lógica [if/then; if/then/else; if/then/elseif/then/else; select case; goto; gosub], ni la asignación de valores a variables [Dim; Let; Set; RSet; LSet].


----------



## Visualizador (Mar 30, 2009)

Que tal! 

Uff, ya le he mirado a esa instruccion que me recomendo, creo que con esa vamos a vanzar y lograr nuestro objetivo. Ahora estoy en espera de instrucciones futuras. Que proseguimos a hacer.

Ah, disculpe por la tardanza, ya que ahora me encuentro en una serie de enredos Laborales y sociales. Pero con su ayuda, saldremos adelante.

Gracias de antemano.


----------



## Visualizador (Mar 6, 2009)

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!!!!!!


----------



## Greg Truby (Mar 31, 2009)

Visualizador said:


> ...Ahora estoy en espera de instrucciones futuras.


 
No sé si se le olvidó, pero el primer paso es...



Greg Truby said:


> Ahora paso 1 (y el más sencillo). Haga una rutina, que *por medio de una bucle (loop)* llena columna C con el texto "vínculo" para cada celda que contiene un número de factura en A y un nombre de cliente en B.


 
¿Ha escrito usted un bucle con este propósito? Recuerde que la hoja será así (con los «Número Factura» estando en la celda A1):

<TABLE style="WIDTH: 291pt; BORDER-COLLAPSE: collapse" border=0 cellSpacing=0 cellPadding=0 width=387 x:str><COLGROUP><COL style="WIDTH: 56pt; mso-width-source: userset; mso-width-alt: 2706" width=74><COL style="WIDTH: 187pt; mso-width-source: userset; mso-width-alt: 9106" width=249><COL style="WIDTH: 48pt" width=64><TBODY><TR style="HEIGHT: 25.5pt; mso-height-source: userset" height=34><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #333399 1.5pt solid; BACKGROUND-COLOR: transparent; WIDTH: 56pt; HEIGHT: 25.5pt; BORDER-TOP: #333399 1.5pt solid; BORDER-RIGHT: #f0f0f0" class=xl65 height=34 width=74>*NUMERO FACTURA*</TD><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; BACKGROUND-COLOR: transparent; WIDTH: 187pt; BORDER-TOP: #333399 1.5pt solid; BORDER-RIGHT: #f0f0f0" class=xl66 width=249>*COMPANIA O CONCEPTO*</TD><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; BACKGROUND-COLOR: yellow; WIDTH: 48pt; BORDER-TOP: #333399 1.5pt solid; BORDER-RIGHT: #333399 1.5pt solid" class=xl67 width=64>Aquí es</TD></TR><TR style="HEIGHT: 13.5pt" height=18><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #333399 1.5pt solid; BACKGROUND-COLOR: transparent; HEIGHT: 13.5pt; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0" class=xl68 height=18></TD><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; BACKGROUND-COLOR: transparent; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0" class=xl69></TD><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; BACKGROUND-COLOR: yellow; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #333399 1.5pt solid" class=xl70>donde el</TD></TR><TR style="HEIGHT: 13.5pt" height=18><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #333399 1.5pt solid; BACKGROUND-COLOR: transparent; HEIGHT: 13.5pt; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0" class=xl71 height=18 x:num>1021</TD><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; BACKGROUND-COLOR: transparent; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0" class=xl69>ADREWS</TD><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; BACKGROUND-COLOR: yellow; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #333399 1.5pt solid" class=xl70>bucle va a</TD></TR><TR style="HEIGHT: 13.5pt" height=18><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #333399 1.5pt solid; BACKGROUND-COLOR: transparent; HEIGHT: 13.5pt; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0" class=xl71 height=18 x:num>1022</TD><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; BACKGROUND-COLOR: transparent; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0" class=xl69>BRENT REDMON</TD><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; BACKGROUND-COLOR: yellow; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #333399 1.5pt solid" class=xl70>poner la</TD></TR><TR style="HEIGHT: 13.5pt" height=18><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #333399 1.5pt solid; BACKGROUND-COLOR: transparent; HEIGHT: 13.5pt; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0" class=xl71 height=18 x:num>1023</TD><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; BACKGROUND-COLOR: transparent; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0" class=xl69>BRENT REDMON</TD><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; BACKGROUND-COLOR: yellow; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #333399 1.5pt solid" class=xl70>palabra</TD></TR><TR style="HEIGHT: 13.5pt" height=18><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #333399 1.5pt solid; BACKGROUND-COLOR: transparent; HEIGHT: 13.5pt; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0" class=xl71 height=18 x:num>1024</TD><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; BACKGROUND-COLOR: transparent; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0" class=xl69>CLAROSCURO</TD><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; BACKGROUND-COLOR: yellow; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #333399 1.5pt solid" class=xl70>"vínculo"</TD></TR><TR style="HEIGHT: 13.5pt" height=18><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #333399 1.5pt solid; BACKGROUND-COLOR: transparent; HEIGHT: 13.5pt; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0" class=xl71 height=18 x:num>1025</TD><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; BACKGROUND-COLOR: transparent; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0" class=xl69>LUMINA</TD><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; BACKGROUND-COLOR: yellow; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #333399 1.5pt solid" class=xl70>en cada</TD></TR><TR style="HEIGHT: 13.5pt" height=18><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #333399 1.5pt solid; BACKGROUND-COLOR: transparent; HEIGHT: 13.5pt; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0" class=xl71 height=18 x:num>1026</TD><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; BACKGROUND-COLOR: transparent; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0" class=xl69>PEDRO SANCHEZ</TD><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; BACKGROUND-COLOR: yellow; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #333399 1.5pt solid" class=xl70>celda</TD></TR><TR style="HEIGHT: 13.5pt" height=18><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #333399 1.5pt solid; BACKGROUND-COLOR: transparent; HEIGHT: 13.5pt; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0" class=xl71 height=18 x:num>1027</TD><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; BACKGROUND-COLOR: transparent; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0" class=xl69>PEDRO SANCHEZ</TD><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; BACKGROUND-COLOR: yellow; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #333399 1.5pt solid" class=xl72></TD></TR><TR style="HEIGHT: 13.5pt" height=18><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #333399 1.5pt solid; BACKGROUND-COLOR: transparent; HEIGHT: 13.5pt; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0" class=xl71 height=18 x:num>1028</TD><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; BACKGROUND-COLOR: transparent; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0" class=xl69>PUBLICIDAD, INC.</TD><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; BACKGROUND-COLOR: yellow; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #333399 1.5pt solid" class=xl72></TD></TR><TR style="HEIGHT: 13.5pt" height=18><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #333399 1.5pt solid; BACKGROUND-COLOR: transparent; HEIGHT: 13.5pt; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0" class=xl71 height=18 x:num>1029</TD><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; BACKGROUND-COLOR: transparent; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0" class=xl69>ADREWS</TD><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; BACKGROUND-COLOR: yellow; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #333399 1.5pt solid" class=xl72></TD></TR><TR style="HEIGHT: 13.5pt" height=18><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #333399 1.5pt solid; BACKGROUND-COLOR: transparent; HEIGHT: 13.5pt; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0" class=xl71 height=18 x:num>1030</TD><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; BACKGROUND-COLOR: transparent; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0" class=xl69>ADREWS</TD><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; BACKGROUND-COLOR: yellow; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #333399 1.5pt solid" class=xl72></TD></TR><TR style="HEIGHT: 13.5pt" height=18><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #333399 1.5pt solid; BACKGROUND-COLOR: transparent; HEIGHT: 13.5pt; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0" class=xl71 height=18 x:num>1031</TD><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; BACKGROUND-COLOR: transparent; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0" class=xl69>BRENT REDMON</TD><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; BACKGROUND-COLOR: yellow; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #333399 1.5pt solid" class=xl72></TD></TR><TR style="HEIGHT: 13.5pt" height=18><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #333399 1.5pt solid; BACKGROUND-COLOR: transparent; HEIGHT: 13.5pt; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0" class=xl71 height=18 x:num>1032</TD><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; BACKGROUND-COLOR: transparent; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0" class=xl69>CLAROSCURO</TD><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; BACKGROUND-COLOR: yellow; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #333399 1.5pt solid" class=xl72></TD></TR><TR style="HEIGHT: 13.5pt" height=18><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #333399 1.5pt solid; BACKGROUND-COLOR: transparent; HEIGHT: 13.5pt; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0" class=xl71 height=18 x:num>1033</TD><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; BACKGROUND-COLOR: transparent; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0" class=xl69>LUMINA</TD><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; BACKGROUND-COLOR: yellow; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #333399 1.5pt solid" class=xl72></TD></TR><TR style="HEIGHT: 13.5pt" height=18><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #333399 1.5pt solid; BACKGROUND-COLOR: transparent; HEIGHT: 13.5pt; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0" class=xl71 height=18 x:num>1034</TD><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; BACKGROUND-COLOR: transparent; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0" class=xl69>PUBLICIDAD, INC.</TD><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; BACKGROUND-COLOR: yellow; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #333399 1.5pt solid" class=xl72></TD></TR><TR style="HEIGHT: 13.5pt" height=18><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #333399 1.5pt solid; BACKGROUND-COLOR: transparent; HEIGHT: 13.5pt; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0" class=xl71 height=18 x:num>1035</TD><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; BACKGROUND-COLOR: transparent; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0" class=xl69>ADREWS</TD><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; BACKGROUND-COLOR: yellow; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #333399 1.5pt solid" class=xl72></TD></TR><TR style="HEIGHT: 13.5pt" height=18><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #333399 1.5pt solid; BACKGROUND-COLOR: transparent; HEIGHT: 13.5pt; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0" class=xl71 height=18 x:num>1036</TD><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; BACKGROUND-COLOR: transparent; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0" class=xl69>ADREWS</TD><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; BACKGROUND-COLOR: yellow; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #333399 1.5pt solid" class=xl72></TD></TR><TR style="HEIGHT: 13.5pt" height=18><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #333399 1.5pt solid; BACKGROUND-COLOR: transparent; HEIGHT: 13.5pt; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0" class=xl71 height=18 x:num>1037</TD><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; BACKGROUND-COLOR: transparent; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0" class=xl69>BRENT REDMON</TD><TD style="BORDER-BOTTOM: #f0f0f0; BORDER-LEFT: #f0f0f0; BACKGROUND-COLOR: yellow; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #333399 1.5pt solid" class=xl72></TD></TR><TR style="HEIGHT: 14.25pt" height=19><TD style="BORDER-BOTTOM: #333399 1.5pt solid; BORDER-LEFT: #333399 1.5pt solid; BACKGROUND-COLOR: transparent; HEIGHT: 14.25pt; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0" class=xl73 height=19 x:num>1038</TD><TD style="BORDER-BOTTOM: #333399 1.5pt solid; BORDER-LEFT: #f0f0f0; BACKGROUND-COLOR: transparent; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #f0f0f0" class=xl74>BRENT REDMON</TD><TD style="BORDER-BOTTOM: #333399 1.5pt solid; BORDER-LEFT: #f0f0f0; BACKGROUND-COLOR: yellow; BORDER-TOP: #f0f0f0; BORDER-RIGHT: #333399 1.5pt solid" class=xl75></TD></TR></TBODY></TABLE>


----------



## Visualizador (Apr 2, 2009)

Que tal!!!!

Debo de disculparme por la tardanza. Ya que su tiempo es muy valioso. He estado concentrandome, y no se si empezar la bucle con la instruccion *FOR,*  o si deba comenzarla con otra instruccion. Disculpe mi ignorancia solamente ocupo una guia maestra como usted. Ja!


----------



## Greg Truby (Apr 2, 2009)

Uno podría hacer el bucle con cada una de la estructuras de bucles que mencioné arriba.  Pero la más fácil sería un bucle *for/next*.


----------



## Visualizador (Apr 2, 2009)

Que tal!

Bien, seguire investigando, si tengo dudas yo le avisare, y de avances. una vez mas disculpe las molestias!


----------



## Greg Truby (Apr 2, 2009)

No olvide que antes de aprender por medio de leer, todos aprendemos por medio de jugar. Cuando quiero agarrar algún tema nuevo, por lo general juego.


----------



## Visualizador (Apr 2, 2009)

Que tal!

Ese es un buen consejo. cuando dice"jugar", quiere decir, practicar o tratar, ya sea con otros archivos o los que se le proporcionen. 

Gracias por la ensenanza.


----------



## Greg Truby (Apr 2, 2009)

Por ejemplo, en post número 16, en la rutina FOO(), le di tres ejemplos de bucles. ¿Ha jugado usted con eso? Un ejemplo de jugando sería agarrar una porción, digamos:
	
	
	
	
	
	



```
Sub foo()
    Dim i%, intPaso%, lngPasoAtras&
    Range("a1").Resize(10) = Application.Transpose(Array("uno", "dos", "tres", "cuatro", "cinco", _
                                                         "seis", "siete", "ocho", "nueve", "diez"))
    For i = 1 To 10
        Let s = s & Range("A" & i) & vbCr
    Next i
    '// (para hacer la caja más ancha para poder ver el título
    Let s = s & String(30, " ") & vbCr
End Sub
```
Y ver si se puede usar el uso de OFFSET() que es una función que usé en el tercer bucle. Tal vez algo como

```
Sub foofoo()
    Dim i%, intPaso%, lngPasoAtras&
    Range("a1").Resize(10) = Application.Transpose(Array("uno", "dos", "tres", "cuatro", "cinco", _
                                                         "seis", "siete", "ocho", "nueve", "diez"))
    For i = 1 To 10
        With Range("A" & i)
            Let s = s & .value & vbCr
            .offset(,1) = .value & " ¡que diversión, jugar!"
        end with
    Next i
End Sub
```
Y con ambas ventanas - Excel y el VBE - visibles, caminar el programa (usar F8 en el VBE) para observar qué pasa con cada paso.

Ahora que he hecho eso, una segunda jugada... cambiar la línea
	
	
	
	
	
	



```
.offset(,1) = .value & " ¡que diversión, jugar!"
```
 a algo nuevo como 
	
	
	
	
	
	



```
.offset(,1) = ucase( .value & " ¡que diversión, jugar!")
```
 
Y nunca juegue con archivos importantes sin haberlos respaldados. Sería más prudente jugar con cuchillos después de cinco tragos de agua ardiente que experimentar con archivos de producción sin respaldo.


----------



## Visualizador (Apr 3, 2009)

Que tal!

para ampliar mi conocimiento un poco, preguntas sobre ejercicion 1:

1.- En algunos otros ejercicios que se me han presentado (pero no dejo de mirar los suyos), he visto que despues de la Variable DIM (si es una variable?) ponen AS y luego el tipo de Variable (boolean, String, Integer, etc). usted no tuvo necesidad de poner eso. En que casos se nombra la variable?

2.- Note que despues de el primer DIM, nombro la Var "I", despues pues el signo "%", despues puso las palabas "intPaso%", "lngPasoAtras&". Pregunta: sin ese signo, funcionaria la macro?, Ah y el signo ""&", otra pregunta, que funcion tienen los signos en la macro?


----------



## Greg Truby (Apr 3, 2009)

Eso es un hábito de un viejo ya... cuando aprendí programar BASIC hace treinta años usamos esos signos

% = integer
& = long
! = single
# = double
$ = string
o sea 
	
	
	
	
	
	



```
dim i%, l&, j!, d#, s$
```
 es lo mismo decir
	
	
	
	
	
	



```
dim i as integer, _
    l as long, _
    j as single, _
    d as double, _
    s as string
```
actualmente la forma larga es la preferida, creo. Pero a veces los hábitos viejos son duros. :wink:

En cuanto a los signos «&». Tienen dos funciones en VBA. Si hay un espacio en frente del signo funciona para agregar dos hileras (strings). Si no ha un espacio en frente, sirve para decir a uno que tal variable es un LONG.
	
	
	
	
	
	



```
Let s = b & c       '// concatenates variable b and variable c
Let l& = CLng(b$)   '// tells us l is a LONG (and that b is a STRING)
```


----------



## Visualizador (Apr 6, 2009)

Hola que tal!

espero que su fin de semana haya estado de maravilla!!!!

Sus ejercicios estan geniales. Me gustaria analizarlos a fondo paso por paso, le parece?

Ok, la variable "i", que va despues de DIM, es la que se va a trabajar con la instruccion FOR, ciero?

OK, las palabras "intPaso%", "lngPasoAtras&", creo que tambien estan nombradas en variable, correcto? "IntegerPaso", LongPasoAtras", a parte de los signos. pero, cual seria la funcion de estas palabras en complemento con la Instruccion FOR? Que clase tan interesante!!!!!

Gracias por sus ensenanzas!!!!!


----------



## Visualizador (Mar 6, 2009)

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!!!!!!


----------



## Greg Truby (Apr 6, 2009)

Visualizador said:


> Ok, la variable "i", que va despues de DIM, es la que se va a trabajar con la instruccion FOR, cierto?
> 
> OK, las palabras "intPaso%", "lngPasoAtras&", creo que tambien estan nombradas en variable, correcto? "IntegerPaso", LongPasoAtras", a parte de los signos. pero, cual seria la funcion de estas palabras en complemento con la Instruccion FOR?


 
Sí, _i, intPaso y lngPasoAtras_ son variables. Dado que no tenemos bucles anidados, bien bien pude haber usado un solo variable. Usé tres por variedad, nada más.

Díme algo... ¿Sabe usted como "caminar" en el VBE - es decir usar la tecla F8 para ir paso por paso? ¿Sabe usted como poner un "watch" (poner una variable bajo observación?


----------



## Visualizador (Apr 7, 2009)

Que tal!

Si, me habian comentado ese "secretito", hace mucho, y me ha servido, lo de"watch", eso si es algo nuevo para mi.

Mi problema creo yo que son las variables, sobre como definirlas, los simbolos, que comandos poner, etc. Pero seguire en investigaciones, ya que no quiero dejar pasar la oportunidad de aprender con usted.


----------



## Greg Truby (Apr 7, 2009)

En cuanto al asunto de los signos, no se preocupe sobre eso. Olvídese de signos y use *AS loquesea*. Lo que sí importa es escoger el tipo de dato más apropiado. Los que no son numéricos son fáciles: 

Fecha / Date
Hilera / String
Boolean
Entonces realmente solo hay que tomar una decisión sobre variables numéricos. Los disponibles son 

Byte
Integer
Long
Single
Double
Currency
Decimal
Los tres primeros son para números enteros y los últimos cuatro son para números de puntos flotantes. Pero en realidad, para números enteros se puede usar LONGS para todos. Y en el caso de números de puntos flotantes, se puede usar DOUBLE al menos que se necesita la exactitud que brinda CURRENCY o DECIMAL.

Sobre eso de los watch, un ejemplo:
	
	
	
	
	
	



```
Sub bucle()
    Dim i As Integer
    For i = 1 To 5
        Debug.Print i, Cells(i, i).Address
    Next i
End Sub
```
Haz un cliq-derecho sobre la _*i*_ e escoja “Add Watch…” y también seleccione el término “cells(i,i).address” y añada otra watch.

Ahora use la F8 para caminar el bucle y observe el valor de las variables mientras corre el bucle. Y note el valor de *i* después de salir del bucle


----------



## Visualizador (Apr 8, 2009)

Hola que tal!

Wow, debo decir que esos ejercicios que me pone, a simple vista parecen sensillos, pero se puede aprender demasiado.

Bien, he estado jugando con este nuevo ejercicio. Ademas, lo nuevo que aprendi en esta leccion es; el AddWatch, ustedes la han de usar mucho cierto?

bien, curiosidades del ejercicio:

Lo que tiene esta instruccion es que tiene un numero principio, y un numero final, (Valor inicial, Valor Final), por lo tanto, la variable o "i", se iguala al valor inicial, hasta llegar al valor final. que en este caso seria 5 veces. Pero en el valor final de"i", en el "Watch", es como si fueran las 5 veces mas la final, osea el resultado final es 6.

Tambien agregue un "watch", en "Cells(i, i).Address", juge primero asi sin nada, a ver que hacia, en value, me muestra los rangos: A1,B2,C3,D4,E5,F6, pero en absoluto (con el signo $). hizo magia ahi, ja!

Saludos!!!


----------



## Greg Truby (Apr 8, 2009)

Bueno. ¿Ahora está listo para el primer paso?

_Ahora paso 1 (y el más sencillo). Haga una rutina, que por medio de una bucle (loop) llena columna C con el texto "vínculo" para cada celda que contiene un número de factura en A y un nombre de cliente en B. _


----------



## Visualizador (Apr 9, 2009)

Que tal!

Bueno, de estar listo, ya lo estoy, solo que aqui en este proyecto, aun no sabria con que empezar, como se empezaria la bucle? claro que se que se empezaria con el nombre asi:

Sub "nombre de proyecto o macro" (este no es muy relevante verdad?)

Dim i As (que tipo de Variable seria aqui, Boolean?)
For i= Estos son los numeros en los que tengo duda
Que Statements se tendrian que agregar aqui?

Next i

Otro(s) statements cierto?

End sub
Solo necesitaria saber los valores. De antemano la ayuda que me ha proporcionado es de maravilla.

Saludos!


----------



## Greg Truby (Apr 10, 2009)

Visualizador said:


> Sub "nombre de proyecto o macro" (este no es muy relevante verdad?)


Bueno, como usted ha visto, he estado usando nombres como "foo()" y "foofoo()". O sea, el nombre no importe, se puede poner cualquier nombre que quiera. Pero trater de evitar nombres de funciones ya existentes en Excel o VBA y que brindan una idea de qué se trata.


Visualizador said:


> Dim i As (que tipo de Variable seria aqui, Boolean?)


No un bucle FOR/NEXT va contando. Así que se necesita una variable tipo numerico. Booleans son solamente para CIERTO/FALSO. Bucles FOR/NEXT van incrementando por numeros enteros. Entonces se va a necesitar una variable, BYTE, INTEGER o LONG. En VBA, se puede usar LONG en este caso y no preocuparse sobre el "malgasto" de usar "demasiado memoria".

¿Ahora, listo?


----------



## Visualizador (Apr 14, 2009)

Hola que tal!!!!


Listo? yo estoy listo para seguir adelante. Pero, si usted dice que ese es el primer paso y el mas sencillo, no quiero imaginarme lo que viene. Pero estoy dispuesto a tomar ese riesgo!

La verdad, ya le intente aprender por medio de jugar, estudiar, pero ocupo solo un poquito mas de ayuda y guia, se me hace muy dificil entender. Tal vez si en la practica vamos aprendiendo. Ahora lo que me trabo, es en los statements o sentencias, ya las variables ya me quedo un poco mas claro.pero. Pero si no, yo le echare mas ganas, para aprender. Y asi poder avanzar al siguiente nivel.

Gracias por su atencion y paciencia.


----------



## Greg Truby (Apr 14, 2009)

Bueno, ¿ha intentado escribir el bucle para llenar las celdas en columna C?  Vea mi post número 21 para más detalles.


----------



## Visualizador (Apr 15, 2009)

Que tal!

Una pregunta, para el bucle que me pide, ocupo la instruccion *FOR..NEXT?*

Saludos!!!!


----------



## Visualizador (Mar 6, 2009)

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!!!!!!


----------



## Greg Truby (Apr 15, 2009)

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.


----------



## Visualizador (Apr 21, 2009)

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:


```
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!!!!!!!


----------



## Greg Truby (Apr 26, 2009)

Ahora soy yo quien tiene que pedir discuplas por haber tardado.  Adapté el código de usted un poco aquí
	
	
	
	
	
	



```
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.


----------



## Visualizador (Apr 29, 2009)

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"?


----------



## Greg Truby (Apr 29, 2009)

Visualizador said:


> 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)".



Visualizador said:


> 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í.


Visualizador said:


> 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
	
	
	
	
	
	



```
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?



Visualizador said:


> 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.



Visualizador said:


> 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 
	
	
	
	
	
	



```
[ c o d e ] my code goes here [ / c o d e ]
```
quitando los espacios sobrantes que puse.


----------



## Visualizador (Apr 30, 2009)

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!!!


----------



## Greg Truby (Apr 30, 2009)

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.


Visualizador said:


> 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.


Visualizador said:


> 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í
	
	
	
	
	
	



```
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
```


----------



## Visualizador (May 6, 2009)

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.


----------



## Greg Truby (May 20, 2009)

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.


----------



## Visualizador (Jun 15, 2009)

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!!!!!


----------

