Jump to content

Héctor Miguel

Members
  • Content Count

    1,247
  • Joined

  • Last visited

  • Days Won

    48

Héctor Miguel last won the day on July 5

Héctor Miguel had the most liked content!

About Héctor Miguel

  • Rank
    Advanced Member
  • Birthday 10/25/1956

Converted

  • Campos
    ,

Recent Profile Visitors

2,413 profile views
  1. aunque comentas que es (exactamente) lo que buscas, sugeriría mirar con más detenimiento esto:
  2. a) los ajustes posibles del ancho de una columna SOLO se pueden dar en 6 intervalos entre un entero y el siguiente... - 0.17, 0.33, 0.50, 0.67, 0.83 y 1.00 (1 seria el siguiente entero) y son medidas "en puntos de documento" (p.ej.) - si tratas de establecer (aun por código) el ancho de una columna en 12.25 (finalmente) quedara en 12.33 - intervalos que se deberán tener en cuenta si se pretende ajustar a medidas en centímetros, pulgadas, -???- b) con respecto de las propiedades de medidas de los objetos... - ColumnWidth devuelve el ancho de la columna (basado en la fuente normal... en uso) - Width y RowHeight devuelven una medida en puntos (1/72 de pulgada... 72 pixeles por pulgada) - la propiedad RowHeight (la altura de una fila) NO puede exceder de 409.5 puntos - Zoom (aplicable a un objeto Window) afecta la proporcionalidad entre ambos tipos de medida - la resolución de salida (impresora) puede mostrar proporcionalidades diferentes (vs. pantalla) - en las propiedades de la pantalla (windows) cada usuario puede personalizar los puntos por pulgada - (depende de tu objetivo...) se necesita factorizar las diferentes unidades de medida (etc. etc. etc.)
  3. este es un "añejo" desarrollo (pero sigue funcionando)... Sub navegaHojas() With Application.CommandBars.FindControl(ID:=957) If Right(.Caption, 3) = "..." Then .Execute Else .Parent.ShowPopup End With End Sub
  4. cambia esta línea: por esto: Cells(k, col + UBound(rango, 2) + 2).Value = rango(i, j)
  5. soy fanático de los "no bucles" (cuando se puede) y esta pudiera ser una alternativa viable (?) Sub FasterJoin() With Range("a3:a" & Cells(Rows.Count, 5).End(xlUp).Row) .Formula = "=""'""&text(e3,""ddmm"")&year(e3)&right(""0000000000""&h3,10)&right(""0000000000""&i3,10)&j3&k3" .Offset(, 1).Formula = "=g3&k3" With .Resize(, 2): .Value = .Value: End With End With End Sub
  6. si las celdas "con datos" son constantes (NO fórmulas) y las celdas "en blanco" están (realmente) vacías... solo cambia esta instrucción: For Each celda In Range("a2:a62") ' <= AJUSTA a tu rango real (o hazlo dinamico ?) ' por esta otra: For Each celda In Range("a2:a62").SpecialCells(2) ' <= AJUSTA a tu rango real (o hazlo dinamico ?) ' no olvides que los detalles que te guardas... (se quedan guardados)
  7. perfectamente el siguiente procedimiento pone un hipervinculo en la columna "B" de cada celda en el rango (columna "A") si no existe el documento buscado deja "la nota" (en lugar del hipervinculo) comprueba la constante "base" (no importa si la escribes en [may/min]usculas) si no quieres el dato en la columna "B", modifica las 3 instrucciones con "celda.Offset(, 1)" => por el número de columna distinto de "1" (una a la derecha de cada celda) probado a nivel local (falta ver su comportamiento "en red" ? -permisos y demás-) hay métodos 20 veces más rápidos, pero solo trabajan con archivos indizados (LAN no incluidas) ' procedimiento para hacer hipervinculos a documentos segun "patron" en las celdas ' _ a partir de una ruta "base" (incluyendo sub-carpetas) de tipo *.pdf ' _ R&D: Héctor Miguel Orozco Díaz (agosto de 2019) ' Option Base 1 Private Const base As String = "\\192.169.11.18\recursoscompartidos\administracion-ventas\interdepartamental\2019 pedidos" Dim n As Integer, fso As Object, carpeta As Object, subcarpeta As Object, subCarpetas() Sub HV_al_Pedido(): Application.ScreenUpdating = False: n = 0 Dim celda As Range, documento As String, ubicacion As String, x As Long Set fso = CreateObject("scripting.filesystemobject") listaCarpetas base: Set carpeta = Nothing: Set fso = Nothing For Each celda In Range("a2:a62") ' <= AJUSTA a tu rango real (o hazlo dinamico ?) ' celda.Offset(, 1).Clear: celda.Offset(, 1) = "No existe documento" For x = 1 To n: documento = Dir(subCarpetas(x) & "\*" & celda & "*.pdf") If documento <> "" Then ubicacion = subCarpetas(x) & "\" & documento celda.Parent.Hyperlinks.Add celda.Offset(, 1), ubicacion, , "Ir al pedido", documento Exit For End If: Next: Next End Sub Private Function listaCarpetas(ruta As String): Set carpeta = fso.GetFolder(ruta): n = n + 1 ReDim Preserve subCarpetas(n): subCarpetas(n) = carpeta.Path For Each subcarpeta In carpeta.SubFolders: listaCarpetas subcarpeta.Path: Next End Function
  8. (creo que) es poco eficiente andar buscando archivo-por-archivo si se encuentra (o no) en una (in)determinada carpeta o seguir buscando en sub-carpetas (sobre todo si el listado es "considerablemente" grande ?) si puedes normalizar tanto la carpeta (una sola) como el nombre, ya sea que inicie (siempre) con el sufijo (o no) + el numero podrías simplificar los hipervinculos una alternativa es la función =HIPERVINCULO("ubicación del documento","texto a mostrar en la celda") otra es insertar hpervinculos como objeto (desde vba: hyperlinks.add .......) de cualquier forma, la "carga" de fórmulas u objetos va directo al archivo de excel comenta cual alternativa te parece más asequible a tu situación (?)
  9. si entiendo bien, lo que pretendes es... - buscar un archivo *.pdf cuyo nombre contenga el texto de la "ActiveCell" - partiendo de una ruta "de base" (EN RED) incluyendo cualquier (posible) sub-carpeta - una vez localizado (cualquiera este sea), abrirlo con el lector pdf de acrobat pregunta de base: si hubiera dos archivos (o más) que cumplen la condición (parcial) del nombre... - cómo aseguras que "el primero" (que se encuentre) ES/ERA el que espera(ba)s encontrar ?
  10. disculpa que insista en que el abanico de (posibles) combinaciones en fórmulas de excel, da para temas aparte, por lo que no existe forma universal de analizarlas 1) este caso, si podemos asumir que se llama a solo una función y le pasas los argumentos como referencia de celdas (únicas), te lo resuelve esta UDF: Function Argumentos(celda As Range) As String: Dim cadena As String, args, n As Long, msj As String With celda: cadena = Mid(.Formula, 2, Len(.Formula) - 2): End With: msj = "argumentos utilizados:" With CreateObject("vbscript.regexp") .Global = True: .IgnoreCase = True: .Pattern = "\w+\(": args = Split(.Replace(cadena, ""), ","): End With For n = LBound(args) To UBound(args): msj = msj & " " & n + 1 & ") " & args(n) & " = " & Evaluate(args(n)): Next Argumentos = msj End Function el que hagas con cada uno de los argumentos, ya depende de tus intenciones o necesidades ? 2) el "problema" empieza cuando dices: imagina una fórmula de este tipo: =si(e4=i$3,entero((contar.si(e$3:e4,i$3)-1)/3)+1+(abs((3*o$1)-residuo(contar.si(e$3:e4,i$3)-1,3))+(o$1=0))/10,0)
  11. hablando de recorrer argumentos de fórmulas (en excel), creo que debes tener en consideración eventualidades como las siguientes: - una fórmula podría referir argumentos y/o a funciones "anidadas" (varias) - cada (posible) función anidada, podría referir a otros argumentos (diversos) - dichos argumentos pudieran ser rangos, nombres, referencias externas, matrices constantes, UDF's, etc. supongo que (más tarde o más temprano) no escaparás de la necesidad de... - analizar la fórmula - analizar funciones anidadas - distinguir tipos de argumentos - proceder con (alg)una especie de bucle para... (???) por si quieres comentar los detalles que dejas "en el tintero" ?
  12. determinar cuales celdas están "bajo una figura incrustada" en una hoja de cálculo es un reto de varias aristas: el adjunto lleva una copia del archivo original más una hoja con "equivalencias" trasladadas a rangos que permiten analizar algunas de las aristas (p.ej.) - las celdas de la hoja terminan por ser rectángulos (cero oblicuidades) - las figuras incrustadas NO son parte de las celdas, están en la "capa de dibujo" de la hoja (y son flotantes) - determinar sobre que rango "flota" una figura incrustada es sencillo, el "pero" está en lo siguiente: - las figuras (aun líneas rectas pero oblicuas) guardan un "reflejo rectangular" del área sobre el rango donde flotan - si se "agrupan" dos (o más) lineas en diagonal se puede notar un rango más grande de las celdas "bajo la figura", ver primera macro (rangoDeFiguras) - esto se puede observar con la segunda macro (ubicacionDeFiguras) que reporta los rangos (aparentemente) "invertidos" de las figuras en diagonal " / " (no así en el caso " \ ") - los rangos reportados "conservan" esa dirección de celdas "izquierda-arriba => derecha-abajo" (.TopLeft - .BottomRight) - lo que lleva a la necesidad de calcular el ángulo de la recta para determinar las celdas "reales" por las que atraviesa la línea la primera macro está tomada de esta conversación: excel vba find range object occupied by shape object en el caso de determinar si "x" celda forma parte de un rango (hoja2) la cosa es más sencilla el formato condicional fue aplicado usando el caracter de intersección de rangos en fórmulas y funciones (un espacio entre rangos) a través de nombres, ya que no se puede aplicar en directo sobre formatos condicionales (ni algunas otras herramientas) bueno, no comento más ya que el material de estudio para resolver el tema de "celdas bajo figuras incrustadas" puede aparecer en cualquier lado (combinados ?) celda en rango (ayudaExcel).xlsm
  13. se ha comprobado que hablando de seguridad "anti-intrusos" en proyectos de excel, no existe método "a prueba de balas" alternativas (posibles) antes de recurrir a software de terceros o lenguajes primarios de programación ?... op1: recordar (o aprender) las hojas de macros y diálogos de la versión 4.0 - cada vez son menos los que las conocen (y menos aun los que las entienden y programan) op2: conseguir (y programar en) la versión 5/7/95 de excel - no VBIDE, no módulos de clase, resulta en: "el proyecto no se puede mostrar" (no hay "convertidores") op3: hay una serie de trucos (20 pasos de protección) para cansar al "amigo de lo ajeno" - por desventura, software de terceros (como libre office) "se pasan por el arco del triunfo" las protecciones de ms-office <\°|°/> la pregunta clave es: cuales son los recursos con que cuenta... - el que protege una propiedad intelectual ? - el que "toma prestados" desarrollos ajenos ?
  14. si no recuerdo mal, por allá de mayo de 2010 ya habías preguntado algo por un calendario perpetuo con diferente "arreglo" (?) y si entiendo bien y por "días de la semana" te refieres a las celdas con formato personalizado de tipo "ddd", mira el adjunto en devolución calendario finde (ayudaExcel).xlsx
  15. hay algo que te impida adecuar la propuesta a una consulta a lo que sea que "debiste" decir de TU realidad ? si cambias lo que expusiste en la consulta: que resultó en la propuesta: y (ahora) resulta que cambias de celda de "E2" a => "Resumen!C5" (obviamente) la propuesta cambia a: =multiplo.superior(resumen!c5,"0:15") (por si las dudas): la propuesta de fórmula no requiere funciones "auxiliares", es "en directo y sin escalas"
×
×
  • Create New...

Important Information

Privacy Policy