Jump to content

paikerr

Members
  • Content Count

    129
  • Joined

  • Last visited

Everything posted by paikerr

  1. Hola a todxs, ¿Cuál es la ruta de acceso a todos los archivos temporales y personales creados por defecto por Excel? Gracias de antemano.
  2. Efectivamente: "Microsoft no puede recuperar el archivo porque está dañado". Eso es lo que pone. Virus no tengo, y reinicié ya varias veces. Y no consigo nada... Hice todo eso, y nada. Lo que pasa es que a la hora de guardarlo, se completa la barra entera de guardado, pero automáticamente se cierra el programa y no ha guardado los cambios con éxito. Crea una copia en binario, pero tampoco la puede abrir porque "el archivo está dañado". ¿Qué puedo hacer?
  3. Pues eso. Quiero recuperar un archivo dañado que no me deja ni aplicar cambios, ni guardar, ni sobreescribir nada directamente sobre él. De manera que quiero traspasar todos los datos a un nuevo archivo de Excel, dado que el actual se encuentra ya dañado. Pero tampoco me deja copiar y pegar los datos. El archivo pesa 10.443 KB. ¿Alguien sabe qué puedo hacer? Gracias de antemano.
  4. Gracias @Gerson Pineda. Al final me decanté por esta otra opción: ... For Fila = 1 To Cells(Rows.Count, 1).End(xlUp).Row With Cells(Fila, 1) .Replace what:="(E*", Replacement:="" .Replace what:=" ET*", Replacement:="" End With Next Fila ... Porque al final es lo que decía @Haplox: "La clave está en buscar patrones", dado que los términos "(E" y " ET" son los que más se repiten. Gracias a todos. Es bueno disponer de vuestros ejemplos, por si alguna vez necesito código spaguetti. *** Tema cerrado ***
  5. Es un contenido variable. No. Depende de cada caso. No. Varía constantemente. Por supuesto, de gran utilidad práctica. Lo uso diariamente. Se aplica al contenido de una celda. Casi siempre trabajo con estos dos ejemplos: Ejemplo 1: "2:0 (0:10)(P 5:5)" Ejemplo 2: "1:0 (7:4) ET 2:3 (52:1)" Nota: En color rojo y negrita, la parte del excedente que quiero eliminar. Gracias @Antoni.
  6. Hola a todxs, Quiero borrar el contenido que no necesito dentro de una celda. Por ejemplo, imáginemos la siguiente celda: [A1] = (A:B)(C:D)(E:F)(G:H) Quisiera borrar el contenido que está marcado en rojo negrita, y lo único que se me ocurre es hacer uso de la función Mid. ... [A1] = (A:B)(C:D)(E:F)(G:H) Celda = Mid(Cells(1, 1), 1, 10) [A1] = Celda ... Otra opción que se me ocurre también es la siguiente: ... With [A1] .Value = (A:B)(C:D)(E:F)(G:H) .Replace what:="(E*", Replacement:="" End With ... Si a alguien se le ocurre otro método más abreviado o más depurado, soy todo oídos (u ojitos en este caso... jejeje). Gracias de antemano.
  7. Hola @Cacho R, A ver... Perdona que te moleste de nuevo, pero tengo un pequeño problemilla con el código que me has pasado. La historia es la siguiente: "Después de aplicar tu código (hecho que funciona a las mil perfecciones), me encuentro con que al ejecutar otras macros que yo mismo he desarrollado no se aplican del modo correcto, como por ejemplo así me ocurre con el siguiente código (que no divide los datos en columnas): ... With Cells(Fila_actual + 5, 1) ' Texto de las celdas: .Cut Destination:=Cells(Fila_actual, 5) ' Texto en columnas: .TextToColumns Destination:=Cells(Fila_actual, 5), DataType:=xlDelimited, Other:=True, OtherChar:="+" ... Te lo comento porque estoy convencidísimo de que hay alguna función (o algo) dentro de tu código, que simplemente hay que desactivarlo porque (creo) que está trabajando en memoria y me está jodi... la ejecucción del resto de procedimientos." ¿No sé si me he explicado bien... ?
  8. @Cacho R, ya lo he probado y funciona de p... madre. He intentado adaptar el código al archivo original, y funciona perfectamente. Saludos, y muchísimas gracias.
  9. Perfecto. Lo pruebo, y te comento que tal me va. ¡Mil gracias por tomarte tu tiempo desde ya!
  10. @Haplox, ya leí tu comentario. Espero que esto también te sirva de orientación para ver un poco cuál es el procedimiento que estoy tratando de construir. Cualquier cosa, comentad. Mil gracias a todos.
  11. Siiiii... Estaba preparándo tu respuesta... Jajajaja.
  12. Hola @Cacho R. Gracias por la aportación. He aplicado los cambios que me has dicho. Espero que te sirvan para ponerlos en páctica. Te dejo por aquí el enlace para descargar el archivo corregido en base a los pasos que me has indicado: https://www.dropbox.com/s/o1m10x8w6c105kw/ACTUALIZACION2.xlsm?dl=0 Y el código que estoy aplicando (que no funciona y se demora en más de 5 minutos) es el siguiente: Sub BuscadorDeDatos() ' *** DECLARACION DE VARIABLES *** ' Dim DESTINO As Worksheet Set DESTINO = Sheets("DESTINO") Dim ORIGEN As Worksheet Set ORIGEN = Sheets("ORIGEN") Application.ScreenUpdating = False Tiempo_inicial = Timer For Fila_actual = DESTINO.Cells(Rows.Count, 1).End(xlUp).Row To DESTINO.Cells(Rows.Count, 1).End(xlUp).Row - 5000 Step -1 Dim ORIGEN As String, DESTINO As String ORIGEN = ORIGEN.Cells(2, 1) & ORIGEN.Cells(2, 2) & ORIGEN.Cells(2, 3) & ORIGEN.Cells(2, 4) DESTINO = DESTINO.Cells(Fila_actual, 2) & DESTINO.Cells(Fila_actual, 3) & DESTINO.Cells(Fila_actual, 4) & DESTINO.Cells(Fila_actual, 5) ' *** ACTUALIZACION DE DATOS *** ' If DESTINO = ORIGEN Then Range(ORIGEN.Cells(2, 6), ORIGEN.Cells(2, 7)).Copy Destination:=Range(DESTINO.Cells(Fila_actual, 8), DESTINO.Cells(Fila_actual, 9)) Range(ORIGEN.Cells(2, 8), ORIGEN.Cells(2, 9)).Copy Destination:=Range(DESTINO.Cells(Fila_actual, 11), DESTINO.Cells(Fila_actual, 12)) ORIGEN.Rows(2).Delete Shift:=xlUp Else ORIGEN.Rows(2).Delete Shift:=xlUp End If Next Fila_actual Tiempo_final = Timer Application.ScreenUpdating = True MsgBox "El tiempo exacto de la ejecución del procedimiento es de " & Format((Tiempo_final - Tiempo_inicial) / 86400, "hh:mm:ss") & "." End Sub Adjunto también una imagen, para te resulte mucho más claro lo que quiero hacer: https://www.dropbox.com/s/jmgb7j6nl5mm846/Foto.jpg?dl=0 "Una vez coincidan los valores contenidos dentro del cuadro azul de la hoja de ORIGEN con los datos cotenidos dentro del cuadro azul de la hoja de DESTINO, entonces traslada los datos del primer círculo verde de la hoja de ORIGEN a la hoja de DESTINO, y luego haz lo mismo pero con los datos contenidos en el segundo círculo de color de verde. Y si coinciden los datos (en color azul) entre ambas hojas, borra la segunda fila de la hoja de ORIGEN. Y si no coinciden los datos, entonces también borra la fila 2 de la hoja de ORIGEN." Y así con todos los datos disponibles dentro de la hoja de ORIGEN, teniendo en cuenta que he reducido el archivo para hacerlo mucho más legible. En realidad, estamos hablando de un archivo con más de 50.000 filas. Muchas gracias de antemano, y espero que te sirva la explicación.
  13. Correcto, ahí tengo un error. El código sería como lo siguiente: ORIGEN = ORIGEN.Cells(2, 1) & ORIGEN.Cells(2, 2) & ORIGEN.Cells(2, 3) & ORIGEN.Cells(2, 4) También lo he corregido en el archivo descargable. Gracias @Haplox. La idea es almacenar dentro de una variable los datos necesarios de la fila 2 de la hoja de ORIGEN, y si coinciden con los contenidos en una de las filas dinámicas (Fila_actual) de la hoja de DESTINO, entonces el procedimiento copia y pega los datos indicados dentro de la estructura If/Else y borra la fila 2 de ORIGEN, y luego vuelve a pasar a almacenar los siguientes datos de la fila 2 de la hoja de ORIGEN. Le resto 5.000, porque no necesito recorrer un bucle con las 50.000 filas disponibles, lo cual contribuye a que el procedimiento se demore en más de 5 minutos. Sino sólo con las 5.000 últimas filas, dado que sólo actualizo los datos de las fechas más recientes. En cuanto a la comparación de matrices entre las dos hojas: No lo puedo realizar, porque los datos les descargo directamente de Internet, y no coinciden nunca en el tamaño de la dimensión (o dicho de otro modo, las filas y columnas son siempre distintas en ambas hojas). En consecuencia, un bucle For/Next como el que me propusiste que recorra todas las filas de las dos matrices al mismo tiempo, no cumple con la función. Agradezco enormemente tu aportación, @Haplox.
  14. A ver... Perdonadme, pero no os lo he dicho. La idea principal es pasar sólo los datos que necesito de una hoja a otra (desde la hoja de ORIGEN hasta la hoja de DESTINO), una vez se dé la coincidencia de que los valores comprendidos entre las dos hojas sean iguales (teniendo en cuenta dos cosas: Que la dimensión de la matriz de datos no es la misma, y que los datos de la hoja de ORIGEN no están ordenados). Os dejo el código por aquí también: Sub BuscadorDeDatos() ' *** DECLARACION DE VARIABLES *** ' Dim DESTINO As Worksheet Set DESTINO = Sheets("DESTINO") Dim ORIGEN As Worksheet Set ORIGEN = Sheets("ORIGEN") Application.ScreenUpdating = False Tiempo_inicial = Timer For Fila_actual = DESTINO.Cells(Rows.Count, 1).End(xlUp).Row To DESTINO.Cells(Rows.Count, 1).End(xlUp).Row - 5000 Step -1 Dim ORIGEN As String, DESTINO As String ORIGEN = ORIGEN.Cells(2, 1) & ORIGEN.Cells(2, 2) & ORIGEN.Cells(Fila_actual, 3) & ORIGEN.Cells(Fila_actual, 4) DESTINO = DESTINO.Cells(Fila_actual, 2) & DESTINO.Cells(Fila_actual, 3) & DESTINO.Cells(Fila_actual, 4) & DESTINO.Cells(Fila_actual, 5) ' *** ACTUALIZACION DE DATOS *** ' If DESTINO = ORIGEN Then Range(ORIGEN.Cells(2, 6), ORIGEN.Cells(2, 7)).Copy Destination:=Range(DESTINO.Cells(Fila_actual, 8), DESTINO.Cells(Fila_actual, 9)) Range(ORIGEN.Cells(2, 8), ORIGEN.Cells(2, 9)).Copy Destination:=Range(DESTINO.Cells(Fila_actual, 11), DESTINO.Cells(Fila_actual, 12)) ORIGEN.Rows(2).Delete Shift:=xlUp Else ORIGEN.Rows(2).Delete Shift:=xlUp End If Next Fila_actual Tiempo_final = Timer Application.ScreenUpdating = True MsgBox "El tiempo exacto de la ejecución del procedimiento es de " & Format((Tiempo_final - Tiempo_inicial) / 86400, "hh:mm:ss") & "." End Sub Este paso final, me está suponiendo un verdadero quebradero de cabeza. Primero porque no consigo transladar del modo correcto todos los datos que necesito, y segundo porque se demora en un montonazo de tiempo para nada... Es obvio que necesito algo de orientación. Gracias de antemano por vuestro tiempo.
  15. Efectivamente, @Cacho R. Lo estuve mirando y tal... Pero me resultó especialmente dificil de comprender. Además, modifiqué la posición de las columnas del archivo de origen, y se me volvió tremendamente complicado en base a mis escasos conocimientos adaptar tu código al nuevo archivo. Te dejo por aquí el nuevo archivo, por si quieres echarlo un vistazo y depurar ese proceso en tan sólo unos segundos: https://www.dropbox.com/s/ngr07suprzi78b9/ACTUALIZACION.xlsm?dl=0 Muchas gracias de todos modos.
  16. Gracias por el código @Antoni. Está mucho más depurado. Una pena que sólo admita hasta tres claves de ordenación...
  17. ¡Genial! Este era el código que estaba buscando: Sub FILTROS_COMBINADOS() Columns("A:Z").AutoFilter With ActiveWorkbook.Worksheets("Hoja1").Sort ' Limpiar filtros: .SortFields.Clear ' Aplicar filtros: .SortFields.Add2 Key:=Range(Cells(2, 1), Cells(1048576, 1)), Order:=xlDescending ' Filtro 1 .SortFields.Add2 Key:=Range(Cells(2, 2), Cells(1048576, 2)), Order:=xlDescending ' Filtro 2 ' Ordenar los datos: .SetRange Range(Cells(2, 1), Cells(1048576, 26)) ' Filtrar los datos: .Apply End With End Sub Lo dejo por aquí, para reutilizarlo en un futuro. Gracias.
  18. ¡Perfecto! Gracias @Haplox Le hecho un vistazo, y miro a ver si me funciona.
  19. Jajaja... @Cacho R, cómo os ponéis por nada... No se trata de eso. Ya sabes que agradezco mucho tus aportaciones (y el currazo del listado LCID, también). Simplemente, ya me habéis resuelto la duda por aquí. De manera que no considero necesario seguir dando más bola a este tema. El código que tarda más de 7 minutos, lo tengo en este otro hilo: Y de hecho, ya os pregunto por ahí cómo demonios se hace para reducir el tiempo, porque como bien decían por aquí arriba, "lo inicio hoy, y hasta el día siguiente no termina"... ¡Qué desastre! Por todo esto, no he querido mezclar temas.
  20. Hola a todxs, Tengo este código: ... Columns("A:J").AutoFilter With ActiveWorkbook.Worksheets("VENTAS").AutoFilter.Sort ' Limpiar filtros: .SortFields.Clear ' Aplicar filtros (de menor a mayor): .SortFields.Add Key:=Cells(1, 3), Order:=xlAscending ' Reordena los datos según el precio. .Apply End With ... Como podéis ver, los datos están ordenados de menor a mayor en la columna precios (Bueno... esto no aparece, pero ya os lo digo yo). Me gustaría poder reordenar los datos al mismo tiempo conforme al número de unidades disponibles. Es decir: ... .SortFields.Add Key:=Cells(1, 4), Order:=xlAscending ' Reordena los datos según las unidades disponibles. ... ¿Es posible aplicar dos filtros al mismo tiempo, sin que al ejecutar la macro no dé error? Gracias a todxs de antemano.
  21. Hola a todxs de nuevo, He aplicado algunas modificaciones al siguiente código... Sub BUSCAR_DATOS() ' *** DECLARACION DE VARIABLES *** ' Dim INVENTARIO As Worksheet Set INVENTARIO = Sheets("Inventario") Dim VENTAS As Worksheet Set VENTAS = Sheets("Ventas") Application.ScreenUpdating = False Tiempo_inicial = Timer Dim Fila_INVENTARIO As Long Dim Fila_VENTAS As Long Fila_VENTAS = 2 For Fila_INVENTARIO = INVENTARIO.Cells(Rows.Count, 1).End(xlUp).Row To 6 Step -1 Dim INVEN As String, VEN As String INVEN = INVENTARIO.Cells(Fila_INVENTARIO, 2) & INVENTARIO.Cells(Fila_INVENTARIO, 3) & INVENTARIO.Cells(Fila_INVENTARIO, 4) & INVENTARIO.Cells(Fila_INVENTARIO, 5) VEN = VENTAS.Cells(Fila_VENTAS, 1) & VENTAS.Cells(Fila_VENTAS, 2) & VENTAS.Cells(Fila_VENTAS, 3) & VENTAS.Cells(Fila_VENTAS, 4) ' *** ACTUALIZACION DE DATOS *** ' If INVEN = VEN Then Range(VENTAS.Cells(Fila_VENTAS, 6), VENTAS.Cells(Fila_VENTAS, 7)).Copy Destination:=Range(INVENTARIO.Cells(Fila_INVENTARIO, 8), INVENTARIO.Cells(Fila_INVENTARIO, 9)) Range(VENTAS.Cells(Fila_VENTAS, 8), VENTAS.Cells(Fila_VENTAS, 9)).Copy Destination:=Range(INVENTARIO.Cells(Fila_INVENTARIO, 11), INVENTARIO.Cells(Fila_INVENTARIO, 12)) VENTAS.Rows(Fila_VENTAS).Delete Shift:=xlUp Fila_VENTAS = Fila_VENTAS + 1 Else VENTAS.Rows(Fila_VENTAS).Delete Shift:=xlUp Fila_VENTAS = Fila_VENTAS + 1 End If Next Fila_INVENTARIO Tiempo_final = Timer Application.ScreenUpdating = True MsgBox "El tiempo exacto de la ejecución del procedimiento es de " & Format((Tiempo_final - Tiempo_inicial) / 86400, "hh:mm:ss") & "." End Sub ...pero como ya comenté por otro hilo, el procedimiento se demora en más de 7 minutos en ejecutarse. Obviamente, necesito reducir el tiempo. Gracias de antemano.
×
×
  • Create New...

Important Information

Privacy Policy


CTA Templates.png