Hipervínculos entre celdas y documentos a partir de un texto determinado.

Para Dante Amor.

Dante, anteriormente me ayudaste con una macro en donde seleccionaba una celda de la columna A, que contienen una serie de números y al dar clic me habría por medio de hipervínculo un documento en .dxf. Pero tengo otra petición, una modificación que me acaban de asignar y te pido una disculpa por ello. ¿Cómo podría hacerle si el numero del archivo por abrir, va dentro de un conjunto de caracteres?, por ejemplo: A7722-1P-02302_01-151 RA.pdf, en este caso el numero a buscar es el " 151 " y todos los números se encuentran al final con un guion medio ante puesto. El detalle es que este numero se puede repetir debido a las revisiones que se le vayan dado al documento y la diferencia sera la nomenclatura: RA.

Como podrás observar en la imagen, el numero 172 tiene revisión RA y revisión RB, ahí me interesaría que abriera la ultima revisión. Estas tendrán un consecutivo en letra RA, RB, RC, RD... Y asi sucesivamente ¿Se podrá?

1 respuesta

Respuesta
1

Me puedes explicar lo siguiente

¿En la celda tienes un texto o una imagen?

¿En el texto tienes la extensión?

¿En cuál columna están esos datos?

Si seleccionas la celda que tiene el dato "172 RA", ¿quieres qué te abra el archivo "172 RB"?

Hola Dante, te comento.

En la columna A, a partir de la A2, son números ( texto ) de manera ascendente ( no son consecutivos en numeración, estos no se repiten y no existen espacios en blanco entre filas ).

Estos no tienen la extensión del documento a abrir, solo es la celda con el numero, pero al dar clic sobre el numero, se necesita que la macro abra el documento ( ya sea .dxf (autocad) o pdf ).

Los archivos se encuentran en una carpeta especifica: H:\projects\40502\nest\pdf parts2do y estos por el momento están en pdf.

Estos archivos, tienen este tipo de nombres " A7722-1P-02302_01-172 RA ", normalmente en la nomenclatura hasta aquí A7722-1P-02302_01- no cambian, donde la macro tiene que buscar es después del guion medio -172 RA. Estos podrán repetirse de esta manera:

A7722-1P-02302_01-172 RA

A7722-1P-02302_01-172 RB

A7722-1P-02302_01-172 RC

A7722-1P-02302_01-172 RD

Donde cambian es en la ultima letra, que vendría siendo la revisión que ha tenido este dcumento y me interesa que la macro, ( si es que se puede ) reconozca la ultima revisión y la abra, vinculado con su numero ( en este caso 172 ).

De antemano te agradezco la ayuda Dante, y disculpa mis molestias.

Saludos.

Sigo sin entender cómo está la información en la celda.

Podrías poner una imagen para ver qué tienes en las celdas. Procura que en la imagen se vean las filas y las columnas de excel.

Mi documento se ve asi. 

En la columna A esta la numeración que necesito sea linkeada. Siempre estarán de la celda A2, para abajo hasta que encuentre una celda vacia. Por ejemplo: En la celda A2, al momento de que el usuario de clic en la celda o el numero 1 (dependiendo de la macro), este automáticamente abra el documento llamado: A7722-1P-02302_01-1 RA.pdf . El cual se encuentra en: H:\projects\40502\nest\pdf parts2do

Sin embargo, si A7722-1P-02302_01-1 RA.pdf tiene un consecutivo: A7722-1P-02302_01-1 RB.pdf, que habra el que su terminación sea mayor, de acuerdo con el abecedario. RA...RB...RC... etc.

Y los documentos aparecen en la carpeta como en la imagen que te mostré anteriormente. 

H o l a: No entendí tu comentario: "En la celda A2, al momento de que el usuario de clic en la celda o el numero 1 (dependiendo de la macro),"

Pero, te anexo la macro. Pon la macro en los eventos de tu hoja. Para abrir los archivos tienes que darle click a las celdas de la columna A. La macro abrirá el archivo PDF con el nombre contenido en la celda de la columna B.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Por.Dante Amor
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    '
    ruta = "H:\projects\40502\nest\pdf parts2do\"
    'ruta = "C:\trabajo\"
    'ext = ".dxf"
    ext = ".pdf"
    '
    If Target.Count > 1 Then Exit Sub
    If Target.Value = "" Then Exit Sub
    If Not Intersect(Target, Range("A:A")) Is Nothing Then
        Set h1 = Sheets.Add
        ChDir ruta
        'nomb = Cells(Target.Row, "B")
        arch = Dir(Cells(Target.Row, "B") & "*.pdf")
        i = 1
        Do While arch <> ""
            h1.Cells(i, "A") = arch
            i = i + 1
            arch = Dir()
        Loop
        If i > 1 Then
            u = h1.Range("A" & Rows.Count).End(xlUp).Row
            With h1.Sort
                .SortFields.Clear
                .SortFields.Add Key:=h1.Range("A1:A" & u), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
                .SetRange h1.Range("A1:A" & u)
                .Header = xlGuess
                .MatchCase = False
                .Orientation = xlTopToBottom
                .SortMethod = xlPinYin
                .Apply
            End With
            archivo = ruta & h1.Cells(u, "A")
            ActiveWorkbook.FollowHyperlink archivo
        End If
        h1.Delete
    End If
End Sub

Prueba la macro. Si necesitas que convivan dos o más macros, tendrás que decirme a qué le quieres dar click y qué quieres que se abra.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

Hola Dante, creo que lo estoy complicando mucho.

Supongamos que el usuario esta leyendo el documento y se detiene en la celda A90. Esta contiene el numero 151. Si el le da clic a la celda A90. La macro tiene que reconocer el numero que esta en esa celda, ( en este caso 151 ). Vaya a la carpeta donde están todos los documentos guardados en pdf y busque el pdf que contenga el 151 dentro de su nombre. En este caso: A7722-1P-02302_01-151 RA.pdf (Estos números siempre irán después del guion medio y al final ).

Espero no confundirte mucho.

PD. No me mando a llamar documentos la macro que me enviaste.

Saludos.

Revisa la ruta.

ruta = "H:\projects\40502\nest\pdf parts2do\"

Prueba nuevamente la macro

En la primera ocasión pusiste la ruta "pdf parts2do" sin espacio y después con espacio, revisa que estén bien escritos los nombres de la ruta y que estén en el drive H:

Si le hice la modificación de la ruta en el código, para la carpeta donde están estos documentos, pero aun así no me los llamo.

Revisa que no haya espacios después del nombre que tienes en la columna B

Borra esta línea de la macro

h1.Delete

Selecciona un número que tenga varias versiones

La macro te crea una nueva hoja, revisa qué te puso en la hoja

La macro funciona, hice pruebas con archivos nombrados con los ejemplos que pusiste y siempre me trae la última versión.

Prueba con esta macro, le hice un pequeño cambio

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Por.Dante Amor
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    '
    ruta = "H:\projects\40502\nest\pdfparts2do\"
    'ruta = "C:\trabajo\"
    'ext = ".dxf"
    ext = ".pdf"
    '
    If Target.Count > 1 Then Exit Sub
    If Target.Value = "" Then Exit Sub
    If Not Intersect(Target, Range("A:A")) Is Nothing Then
        Set h1 = Sheets.Add
        'ChDir ruta
        'nomb = Cells(Target.Row, "B")
        arch = Dir(ruta & Cells(Target.Row, "B") & "*.pdf")
        i = 1
        Do While arch <> ""
            h1.Cells(i, "A") = arch
            i = i + 1
            arch = Dir()
        Loop
        If i > 1 Then
            u = h1.Range("A" & Rows.Count).End(xlUp).Row
            With h1.Sort
                .SortFields.Clear
                .SortFields.Add Key:=h1.Range("A1:A" & u), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
                .SetRange h1.Range("A1:A" & u)
                .Header = xlGuess
                .MatchCase = False
                .Orientation = xlTopToBottom
                .SortMethod = xlPinYin
                .Apply
            End With
            archivo = h1.Cells(u, "A")
            ActiveWorkbook.FollowHyperlink ruta & archivo
        End If
        h1.Delete
    End If
End Sub

Dante, le modifique unas cosillas, y también a mi documento, y ya esta funcionando, te agradezco mucho por la ayuda y las molestias causadas. Excelente Experto!

Gracias. 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas