Saltar al contenido

Hipervínculos a Windows trabajando varios usuarios en OneDrive con un archivo de Excel


jacexcel

Recommended Posts

publicado

Hola a todos este el problema que me gustaría resolver:

  1. Tenemos un archivo de Excel en OneDrive (Ejemplo.xls)
  2. El archivo de Excel está compartido con varios usuarios para que cada uno de ellos lo edite con su usuario
  3. Incluyo (jacobo) hipervínculo dentro del Excel a una carpeta de OneDrive en local, por ejemplo C:\Users\jacobo\OneDrive\Documentos
  4. Si otro usuario (maria) abre el Excel y pincha en el hipervínculo no le funciona ya que la ruta no es válida en su pc (C:\Users\jacobo\OneDrive\Documentos) donde dice jacobo tendría que poner maria para qu cuando maria pinche en el enlace la lleve a su carpeta de en local = C:\Users\maria\OneDrive\Documentos

Mi pregunta es:

¿Como crear los hipervínculos y que le funcionen a todos los usuarios que trabajan con el archivo? Esto es los lleve a las carpetas/archivos locales de sus respectivas unidades locales de OneDrive.  

Una solución que he encontrado es dirigir el hipervínculo a la nube, pero yo quiero que te dirija a OneDrive local no a la nube. Con Dropbox podía hacerlo ya que todos los usuarios lo teníamos configurado en C:\Dropbox directamente así que la ruta era la misma siempre.

Un saludo a tod@s!

Jacobo

 

publicado

Jelow,

Desde mi conocimiento, solo lo veo posible usando VBA, con la expresión "Application.Username"

Si la ruta siempre va a ser la misma, es sencillo:

1.- Creas una variable como String y le das el valor "C:\Users\" & Application.Username & "\OneDrive\Documentos"

Mediante una formula sencilla, puedes poner ese valor en una celda, o en un archivo que se encuentre en el documento Excel.

 

No sé si conoces VBA y sus detalles, pero espero te sirva como idea ?

Si te interesa, adjunta un archivo de ejemplo y te puedo ayudar con el código 

publicado

Jelow EdadMedia gracias por la repuesta.  Voy a probar lo que me dices a ver que tal y te cuento. Por otro lado son muchos los archivos con enlaces que utilizamos entre varios usuarios.  Entiendo que con tu solución tendríamos que hacerlo en cada archivo. Sería genial si hubiera una solución para todos los archivos.  Me pregunto como trabajan otras personas en OneDrive con los enlaces a archivos (sin que te lleve a mydrive en la Web). Gracias nuevamente. Que tengas un buen día. Un saludo, Jac 

publicado

 Hola EdadMedia adjunto el Excel con el código a ver qué te parece, funciona, muchas gracias. Está bien para un solo enlace. Pero y si quiero utilizarlo para poner varios hipervínculos a diferentes archivos locales dentro del mismo Excel. Un saludo, Jac

Get User Name.xlsm

publicado

Hola otra vez veo que se han cruzado los mensajes. Miraré lo que me has enviado, muchas gracias.

publicado
hace 8 minutos , jacexcel dijo:

 Hola EdadMedia adjunto el Excel con el código a ver qué te parece, funciona, muchas gracias. Está bien para un solo enlace. Pero y si quiero utilizarlo para poner varios hipervínculos a diferentes archivos locales dentro del mismo Excel. Un saludo, Jac

Get User Name.xlsm 15.31 kB · 0 descargas

Claro, como te digo, el archivo siempre dirigirá a la carpeta que tú digas con el nombre de usuario automático.

Lo único, que para cada link, tendrás que ponerlo.

En cambio, con lo de las fórmulas que te puse arriba en inglés, puedes poner en la celda:

=HIPERVINCULO("primera parte de la dirección de la carpeta"&FORMULA&"segunda parte de la dirección de la carpeta","Texto que se muestra en la celda")

EJEMPLO

1.- Antes de &FORMULA& pones "C:\Users\"

2.- después de la formula puedes poner "\Downloads"

Y te lo guardará en la carpeta de descargas del usuario en cuestión.

 

No sé si me he explicao xD

publicado
hace 1 hora, EdadMedia dijo:

Claro, como te digo, el archivo siempre dirigirá a la carpeta que tú digas con el nombre de usuario automático.

Lo único, que para cada link, tendrás que ponerlo.

En cambio, con lo de las fórmulas que te puse arriba en inglés, puedes poner en la celda:

=HIPERVINCULO("primera parte de la dirección de la carpeta"&FORMULA&"segunda parte de la dirección de la carpeta","Texto que se muestra en la celda")

EJEMPLO

1.- Antes de &FORMULA& pones "C:\Users\"

2.- después de la formula puedes poner "\Downloads"

Y te lo guardará en la carpeta de descargas del usuario en cuestión.

 

No sé si me he explicao xD

Gracias EdadMedia lo probaré y te voy contando 

publicado

Funciona gracias EdadMedia

 

 

 

 

hace 21 horas, jacexcel dijo:

Gracias EdadMedia lo probaré y te voy contando 

 

publicado

Hola EdadMedia al final he aplicado el macro y también la función siguiente para aplicarlo en cualquier enlace. En la funcion D7 es la celda en la que está el enlace original.  Gracias por la ayuda. Hasta pronto!

=HIPERVINCULO("C:\Users\"&getusername()&"\"&EXTRAE(D7;ENCONTRAR("OneDrive";D7);400);"Enlace")

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

  • 109 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Archivos

  • Estadísticas de descargas

    • Archivos
      188
    • Comentarios
      98
    • Revisiones
      29

    Más información sobre "Cambios en el Control Horario"
    Última descarga
    Por pegones1

    4    1

  • Crear macros Excel

  • Mensajes

    • Buenos días  @LeandroA espero estes bien Tengo un caso idéntico al planteado en la siguiente pregunta: Sin embargo, a diferencia de quien planteo originalmente la pregunta al correr el código no obtengo ningún resultado podrían ayudarme a resolver este inconveniente y que al hacer click en el Botón Guardar (CommandButton3) del Formulario RCS (frmrcs) el archivo pdf quede configurado con orientación vertical, márgenes superior, inferior, derecho e izquierdo = 1 y en página tamaño carta. Si acaso influye uso Microsoft Excel LTSC MSO (versión 2209 Compilación16.0.1.15629.20200) de 64 bits Mucho le sabre agradecer la ayuda que me pueda dar  RCS PRUEBA - copia.xlsm
    • @JSDJSDCon gusto mi estimado Para la opción 1: Sub Surtirhastadondealcanse() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets(1) Dim filaInicio As Integer: filaInicio = 4 Dim filaFin As Integer: filaFin = 7 Dim colInventario As Integer: colInventario = 2 Dim colSolicitudesInicio As Integer: colSolicitudesInicio = 4 ' Columna C Dim colResultadoInicio As Integer: colResultadoInicio = 9 ' Columna I Dim colTotalSurtido As Integer: colTotalSurtido = 12 ' Columna L Dim colFinalInventario As Integer: colFinalInventario = 13 ' Columna M Dim numClientes As Integer: numClientes = 3 Dim fila As Integer, i As Integer For fila = filaInicio To filaFin Dim inventario As Double inventario = Val(ws.Cells(fila, colInventario).Value) Dim solicitudes(1 To 3) As Double Dim surtido(1 To 3) As Variant Dim totalSurtido As Double: totalSurtido = 0 ' Leer solicitudes For i = 1 To numClientes If IsNumeric(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Then solicitudes(i) = CDbl(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Else solicitudes(i) = 0 End If surtido(i) = "POR FALTA STOCK" Next i ' Surtir de acuerdo al inventario disponible For i = 1 To numClientes If solicitudes(i) > 0 Then If inventario >= solicitudes(i) Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) ElseIf inventario > 0 Then surtido(i) = inventario totalSurtido = totalSurtido + inventario inventario = 0 Else surtido(i) = "POR FALTA STOCK" End If End If Next i ' Escribir resultados en las columnas correspondientes para cada cliente For i = 1 To numClientes With ws.Cells(fila, colResultadoInicio + i - 1) If surtido(i) = "POR FALTA STOCK" Then .Value = surtido(i) .Font.Color = vbRed Else .Value = surtido(i) .Font.Color = vbBlack End If End With Next i ' Escribir total surtido y existencia final ws.Cells(fila, colTotalSurtido).Value = totalSurtido ws.Cells(fila, colFinalInventario).Value = inventario Next fila MsgBox "Resultado surtido cargado con éxito...", vbInformation End Sub Para la opción 2:   Sub surtirenpartesiguales() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets(1) Dim filaInicio As Integer: filaInicio = 13 Dim filaFin As Integer: filaFin = 16 Dim colInventario As Integer: colInventario = 2 Dim colSolicitudesInicio As Integer: colSolicitudesInicio = 4 ' Columna C Dim colResultadoInicio As Integer: colResultadoInicio = 9 ' Columna I Dim colTotalSurtido As Integer: colTotalSurtido = 12 ' Columna L Dim colFinalInventario As Integer: colFinalInventario = 13 ' Columna M Dim numClientes As Integer: numClientes = 3 Dim fila As Integer, i As Integer For fila = filaInicio To filaFin Dim inventario As Double inventario = Val(ws.Cells(fila, colInventario).Value) Dim solicitudes(1 To 3) As Double Dim surtido(1 To 3) As Variant Dim totalSurtido As Double: totalSurtido = 0 Dim totalPedido As Double: totalPedido = 0 ' Leer solicitudes For i = 1 To numClientes If IsNumeric(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Then solicitudes(i) = CDbl(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) totalPedido = totalPedido + solicitudes(i) Else solicitudes(i) = 0 End If surtido(i) = 0 Next i ' Si hay suficiente inventario, surtir lo que el cliente pide If inventario >= totalPedido Then For i = 1 To numClientes If solicitudes(i) > 0 And inventario >= solicitudes(i) Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) End If Next i Else ' Reparto base igualitario Dim baseSurtido As Long baseSurtido = Int(inventario / numClientes) For i = 1 To numClientes If solicitudes(i) > 0 Then If solicitudes(i) <= baseSurtido Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) Else surtido(i) = baseSurtido inventario = inventario - baseSurtido totalSurtido = totalSurtido + baseSurtido End If End If Next i ' Repartir sobrante restante uno por uno, respetando lo pedido Do While inventario > 0 For i = 1 To numClientes If surtido(i) < solicitudes(i) Then surtido(i) = surtido(i) + 1 totalSurtido = totalSurtido + 1 inventario = inventario - 1 If inventario = 0 Then Exit For End If Next i Loop End If ' Escribir resultados en las columnas correspondientes para cada cliente For i = 1 To numClientes With ws.Cells(fila, colResultadoInicio + i - 1) If surtido(i) = 0 Then .Value = "POR FALTA STOCK" .Font.Color = vbRed Else .Value = surtido(i) .Font.Color = vbBlack End If End With Next i ' Escribir total surtido y existencia final ws.Cells(fila, colTotalSurtido).Value = totalSurtido ws.Cells(fila, colFinalInventario).Value = inventario Next fila MsgBox "Resultado surtido cargado con éxito...", vbInformation End Sub Saludos, Diego
    • Buenos dias.  Estoy trabajando en una hoja para poder llevar un control de un pequeño almacén.  Tengo un pedido con varias líneas y "lotes" y necesito sacar las ubicaciones que coincidan con la referencia y lote que pone en el pedido. El problema viene cuando tengo la misma referencia y mismo lote en ubicaciones diferentes y necesito sacar la información en columnas diferentes. No se si  me he explicado bien, pero creo que con el ejemplo adjunto se entiende mejor. Agradecería mucho si me pudieran ayudar  Libro1.xlsx
    • Exelente solución mil gracias 
    • Podrías compartir tu solucion
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.