Jump to content

Héctor Miguel

Members
  • Content Count

    1,297
  • Joined

  • Last visited

  • Days Won

    54

Everything posted by Héctor Miguel

  1. 1) tu consulta inicial fue una "punta de iceberg" (debajo hay mucho más de "lo que se ve por encima") y si comentas "solo una parte" del problema ... solo puedes aspirar a obtener "una parte" de la (posible) solución 2) en este punto, empieza a ser importante contar con el escenario de la situación a resolver (p.ej.) - que hace que la celda linkeada, al copiarla entre hojas y/o libros, sea diferente la referencia inicial ? - la "ruta de" y el libro cerrado es siempre la misma (y la hoja y rango), o cambia según usuario y/o equipo ? - que debiera quedar si COINCIDIR(... no encuentra coincidencia ? 3) pudiera ser de igual riesgo (o más) cambiar un montón de fórmulas, por un montón de hipervínculos como objetos (?) o indicas como (RE)crear un modelo/entorno de trabajo (+/- exactamente) "igual al tuyo" o adjuntas (una copia de) TUS modelos la copia puede ser recortada (y hasta inventada, pero...) solo procura que sea "fiel de la situación a resolver" saludos, hector.
  2. consultas en un foro de macros y preguntas por una fórmula en celdas ? asumiendo que buscas una fórmula... si quieres que se devuelva un hipervínculo (real), necesitas de la función de hoja de cálculo =HIPERVINCULO("dirección a donde saltar";"texto en la celda") 1) tu principal inconveniente es que en la celda [A7] NO puedes tener "un dato previo" (ABCDE001), Y CAMBIARLO por una fórmula - o pones el concepto (ABCDE001) en otra celda - o lo dejas como parte de la fórmula 2) si NO es indispensable (o requisito) que tu libro "datos_web.xlsx" este cerrado ? puedes usar una formula como esta: =si(contar.si([datos_web.xlsx]hojadatos'!$n:$n;i7);hipervinculo(indice([datos_web.xlsx]hojadatos'!$af:$af;coincidir(i7;[datos_web.xlsx]hojadatos'!$n:$n;0));"ABCDE001");"") 3) si quieres que funcione aun con libros cerrados (las funciones x.SI(... no lo hacen) tienes que cambiar a una fórmula más larga (p.ej.) =si(esnumero(coincidir(i7;'c:\users\usuario\documents\cliente\datos2020\[datos_web.xlsx]hojadatos'!$n:$n;0));hipervinculo(indice('c:\users\usuario\documents\cliente\datos2020\[datos_web.xlsx]hojadatos'!$af:$af;coincidir(i7;'c:\users\usuario\documents\cliente\datos2020\[datos_web.xlsx]hojadatos'!$n:$n;0));"ABCDE001");"") saludos, hector.
  3. no soy yo "quien" para decirlo, pero el tema del número de decimales cae en los huecos de la "aritmética de punto/coma flotante", considerando que... 1) los procesadores interpretan los números (reales, racionales, ...) en "binario" 2) cuando una división es (p.ej.) 1/3 va a generar un periódico "infinito" de decimales la alternativa es "redondear" decimales a un límite cercano a la precisión numérica de excel (14, 13, 12, 11, 10, ...) según la necesidad del cálculo saludos, hector.
  4. hola, a ambos ! o puedes usar esta variante: Function cuentaUnicosEnRangoFiltrado(rango As Range) As Long ' el nombre de la funcion es obvio ' _ pasar como argumento el rango filtrado SIN el tiitulo ' _ R&D: Héctor Miguel Orozco Díaz ' _ una de las contadas situaciones en que el metodo Evaluate se puede usar en una UDF llamada desde celdas ' Dim a As String, b As String a = rango(1).Address(0, 0): b = rango.Address(0, 0) cuentaUnicosEnRangoFiltrado = Evaluate( _ "sum(if(frequency(if(subtotal(3,offset(" & a & ",row(" & b & ")-row(" & _ a & "),)),match(" & b & "," & b & ",)),row(" & b & ")-row(" & a & ")+1),1))") End Function
  5. las celdas "combinadas" suelen llegar a convertirse en "una espina en..." (donde no puedes permanecer cómodamente sentad@) - estorban a la navegación por la hoja (incluso por macros) - no puedes usar (p.ej.) en .ClearContents (que te dice el mensaje de error ?) - (a menos que identifiques que son celdas combinadas y "afectes" -solo- a la primer celda del área combinada) lo que si puedes usar es cambiar "su valor" por... nada ( = "" ) o ( = empty) p.ej. cambia tu procedimiento a... Sub Eliminar_texto() Dim lc As Long, col As Long lc = Cells(1, Columns.Count).End(xlToLeft).Column For col = 1 To lc If Len(Cells(1, col).Value > 3) Then Cells(1, col) = Empty Next End Sub moraleja: cuídate de las celdas "combinadas"
  6. la verdad es que sin poder analizar el archivo en cuestión, no se puede apreciar alguna causa del error que comentas prueba a subirlo en algún sitio de hospedaje (google-drive, onedrive, etc.) y comparte su vínculo para su descarga en su siguiente mensaje
  7. no indicas cual(es) línea(s) causa(n) error(es) y lo único que se ve fuera de contexto es: que para indicar el comodín (asterisco) muestras una "estrella de 5 puntas" (???)
  8. en vba, los errores del tipo -2147xxx (800xxx) significan que una instrucción intenta llamar a un objeto (propiedades, etc.) que NO está presente (o visible) en ese momento sería conveniente "ver" la linea que lo causa (ese tipo de imágenes y "nada" vienen a ser lo mismo) otra posibilidad es que se trate de controles ActiveX (quizá en formulario ?) u otra librería de objetos que NO tienen soporte en excel:mac
  9. (lo mismo que te re/pregunté allá, a ver si por aquí si respondes ?) los datos que vas "soltando a cuenta-gotas" siguen siendo poco claros e insuficientes (me explico): dando por entendido que la ruta es fija (digamos: c:\archivos bajados\ ) supongamos que dentro de esa carpeta existen varios archivos, tipo (y solo para aclaración) como esto: 64000-numeros particulares de la bajada diaria ABC-274785 64000-numeros particulares de la bajada diaria DEF-274785 ... ... ... 64000-numeros particulares de la bajada diaria XYZ-274785 como saber cual de ellos (u otros) es "el bueno" para tu proceso ? procura no dejar detalles "en el tintero", al menos, los que permitan (RE)construir tu modelo de datos y entorno de trabajo ?
  10. esa estructura corresponde a una carpeta ? (o al nombre de un archivo ?) si es carpeta, como identificas el nombre del archivo ? cual es la "ruta base" donde se localiza ? (o es cambiante o dinámica ?) de seguro hay más detalles que te estás dejando "en el tintero" (aprovecha tu siguiente mensaje para aclarar lo que consideres conveniente)
  11. puedes descargar el siguiente complemento y tendrás un panel con la lista de las hojas (siempre a la vista ?) - Excel’s Navigation Pane (versión de prueba por 30 días) con más de 300 funcionalidades disponibles (?)
  12. en tu adjunto en devolución va lo que obtienes de aplicar un algoritmo (vba) basado en la técnica de Tushar Mehta que puedes estudiar luego de visitar este artículo: - Conciliando cuentas con Excel ya que lo analices, descarga el modelo en excel desarrollado para el ensayo como se menciona, seria interesante distinguir cual es la combinación "correcta" (cuando existan dos o más posibles combinaciones ?) si prefieres alternativas usando solo fórmulas y funciones integradas, los "sumandos" no pueden ser más de 20 de sumandos (ambos).xlsx
  13. 1.- (hasta donde sé) las TD sólo pueden hacer un resumen de los datos que toman del origen y si no están en el origen... (hay que agregarlos ?) 2.- en tu adjunto en devolución, agregué una columna a la tabla de origen con los cálculos correspondientes y en una TD (hoja agregada) sustituí "tiempo" por "posición" 3.- si es requisito NO usar la columna agregada a los datos de origen... (?) 3.a) usar transformaciones (PQ) ? 3.b) usar DAX (PP) ? 2.c) construir la TD por macros ? - otros ? td posXseg (sergio).xlsx
  14. prueba cambiando tus códigos a la siguiente estructura (todo en el mismo módulo): Dim siguiente As Date Const tiempo As String = "0:10:00" Sub Auto_Open() guardar End Sub Sub Auto_Close() detener End Sub Sub guardar() siguiente = Now + TimeValue(tiempo) ThisWorkbook.Save Application.OnTime Siguiente, "guardar" End Sub Sub detener(): On Error Resume Next Application.OnTime siguiente, "guardar", Schedule:=False End Sub
  15. es forzoso que deba ser una macro con buscar objetivo ? si te basta con álgebra, analiza la fórmula de la columna C sueldo neto GS (ambos).xlsx
  16. el detalle en tu consulta es que usas un estilo de "adivinen lo que estoy pensando" (?) con respecto de tu adjunto... 1) el módulo "de clase" no contiene nada y en tanto no decidas para qué quieres que "sirva", puedes iniciar pesquisas analizando artículos como este (solo por mencionar alguno): - Introduction To Classes 2) en el evento '_click' del commandbutton de tu formulario (BTNBUSCAR) haces un "intento" de llamada a un procedimiento que NO existe: TraerNombre 3) ese "TraerNombre" es el nombre de un módulo de código, que es un "contenedor" de procedimientos, es decir... - un módulo puede contener varios procedimientos siempre y cuando... - a) ningún procedimiento se llame igual a otro (tampoco igual a ningún módulo de código) - b) cualquier procedimiento declarado en módulos normales puede ser asignado a objetos con solo indicar el nombre del procedimiento en una línea u usando el método: => Call nombre_del_procedimiento 4) en ese módulo (TraerNombre) parece que simulaste el traspaso del evento '_click' de un control indefinido de un userform (?) - aquí entrarían los módulos de clase, previa lectura del artículo sugerido (entre otros) - aunque haces referencia al control "TXTBUSCAR" (mismo que SI se encuentra en tu formulario), no es tan "simple" de referir sin calificar sugiero avanzar más lento (programación rutinaria en vba) y después avanzar a los módulos de clase (y mucho más) ?
  17. 1) los módulos "de clase" (por lo general) son para usos más "especiales" 2) en ninguno de los casos conviene nombrar igual módulos y procedimientos 3) vba reacciona no muy bien ante los nombres "ambiguos" (p.ej. nombres de procedimientos igual a funciones integradas) 4) puedes asignar cualquier macro a (casi) cualquier objeto (botones, textboxes, autoformas, etc.) - si son controles ActiveX dees usar su propio evento '_click' haz tus propias pruebas y decide cual es la forma que más te sirve (?)
  18. no parece que lo vayas a conseguir sin recurrir a otras tecnologías 🤔 los chicos de "Scripting Guys" suelen ser de "humor ligero", pero vale la pena analizar esto: - How Can I Determine the Local Path to a Shared Folder?
  19. como te decía donde también consultaste... el "problema" con este tipo de cálculos en TD es que ni siquiera por campos o elementos calculados resultan en lo que necesitas las TD no tienen una opción que permita "simular" (p.ej.) un SUMAPRODUCTO(... o similares, o sea... ninguna de las alternativas disponibles para calcular como "porciento de..." es apta para tu requerimiento (es decir) dado que las TD tienen la "preferencia" de primero resolver "por fila" y después por subtotal o total, la única solución (conocida hasta ahora) es agregar los cálculos en columna auxiliar en los datos de base y agregar ese campo en la TD (o sea, no te escapas de las "fórmulas externas") en tu adjunto (en devolución)... - los cálculos fueron agregados en la columna "D" de tu hoja "Base" - se amplió el rango de origen de la TD para incluir esa columna auxiliar - se agregó el campo en el área de "Valores" y se aplicó formato de % a una decimal (probablemente) algo se pueda abreviar si aprovechas otras herramientas ? - Power Pivot (DAX) -cuidado con agregar al modelo de datos- - Power Query (M) TD porciento de (ambos).xlsx
  20. mira por aquí: - Diferencia entre notas y comentarios encadenados
  21. lo mismo que te preguntaba "allá"... 1) para la Hoja2: - de A1 a A5 es "cada 4 filas" (se saltan 3) - para el resto es "cada 5 filas" (se saltan 4) - cual es la situación real ? 2) para NO hacerlo "de una por una"... - que contienen las celdas "a saltar" ? (están vacías ?, se pueden sobre-escribir ?, algún detalle ?)
  22. en los códigos que expones... 1) no alcancé a ver nada que indique una (RE)apertura del archivo - probablemente en instrucciones o procedimiento llamados posteriormente ? 2) en el segundo If del CommandButton1_Click tienes una instrucción: => End - lo que esto ocasiona es que: - a) se cancela TODO código en ejecución (por consiguiente) - b) si después hacías derivaciones a otros códigos (quizá preparaciones, protecciones, etc.) "adiós Nicanor" 3) si (realmente) buscas seguridad, algunos tips: - a) NUNCA muestres un MsgBox "informando"... NADA !!! - b) con eso le das la oportunidad al usuario de cancelar todo código en ejecución (al provocar errores) - c) cancela la posibilidad de que el usuario termine tu userform desde la [ X ] o pulsando {esc} lo demás... no quedó "a la vista" (?) saludos, hector.
  23. si eres de los que creen que "una imagen dice más que mil palabras"... te puedo asegurar que... hablando de excel, "un ejemplo en un libro de excel bien se merece más de mil imágenes" que te parece si expones el código que aplicas desde que se abre ese libro y como administras lo que se responda en tu formulario de bienvenida ? es más seguro que probable que NO tengas establecido ningún "control de errores" o cancelaciones (?) saludos, hector.
  24. hola, a todos ! otra posibilidad es agregar un comando "perdido" en la interfaz desde la versión xl-2007 +/- así: a) desde las opciones de configuración de excel, personalizar la QAT b) muestra de la opción -> comandos que no están en la cinta de opciones (o todos los comandos) c) localiza (por orden alfabético) el que dice: "enviar a destinatario de correo" - nota: al poner el puntero sobre este comando, aparece una descripción que al final dice: -> (SendCopySendToMailRecipient) <= así... entre paréntesis d) pulsa en el botón de: Agregar >> (a tu barra de herramientas de acceso rápido) al pulsarlo (desde la QAT) te dara la opción de enviar todo el libro como datos adjuntos o enviar la hoja actual (o el rango seleccionado) como cuerpo del mensaje OJO: deberás tener configurado cliente y cuenta de correo en windows (preferentemente outlook de office) también puedes hacer una macro que muestre el "sobre" para envóos por correo +/- con la siguiente instrucción: ActiveWorkbook.EnvelopeVisible = True saludos, hector.
×
×
  • Create New...

Important Information

Privacy Policy