Jump to content

Antoni

Members
  • Content Count

    9,966
  • Joined

  • Last visited

  • Days Won

    513

Everything posted by Antoni

  1. Hola mjrofra: Yo desistí, no hubo forma de que repetara el formato de las celdas, todas llegaban convertidas como texto. Si lo logras, no dudes en publicarlo en este mismo hilo. Dame una pista, que no recuerdo donde está esta invitación a ST. Salu2. Antoni.
  2. Hola: Parece ser que mi respuesta no ha llegado, (Seguramente no le di a "Enviar respuesta"), pero en síntesis decía: Añade: Application.ScreenUpdating = False[/CODE] con esta instrucción, evitamos el refresco de pantalla al pasar por la instrucción [CODE]ActiveCell.Offset(1, 0).Select[/CODE] Así ahorrarás un 25% del tiempo total, mas o menos. He realizado una prueba de llenado, y el resultado es unos 1.000 elementos/ segundo con una CPU a 1.8 Mhz. Si consideras que el tiempo no se ajusta a este parámetro, envía un archivo con el formulario y el código. Comentas que no sabes subir archivos, es sencillo: Pulsa "Ir a avanzado" En la barra de herramientas, pulsa en el icono con una imagen de un clip: Añadir archivos\Seleccionar archivos\Subir adjuntos\Insertar adjuntos Salu2. Antoni.
  3. Re: Traer datos de otro libro y mostrarlos en el libro activo Hola: Gracias mjrofra, tus comentarios siempre se agradecen, te puedes creer que lo que indicas sobre el copy es el método que utilizo habitualmente y que esta vez me ha dado un error 1004 que he sido incapaz de arreglar. Solución, a grandes males, grandes remedios, tiré de grabadora. He visto por ahí que tienes un blog, por favor. sube el link cuando puedas. Salu2. Antoni.
  4. Hola: En el ejemplo que has puesto, la longitud de la celda combinada seria: Longitud = Len(Cells(i, nCol))[/CODE] Ahora bién, la anchura de la columna, dependerá de la anchura de cada uno de los caracteres y de la fuente utilizada. Por esta razón, mejor utiliza esto: [CODE]Columns(nCol:nCol).EntireColumn.AutoFit [/CODE] Salu2. Antoni.
  5. Hola: No se si existe, pero si existe, seguro que gratis no es. Me parece un proyecto ambicioso, sobre todo en su parte visual, ya que debe ser bastante amena para no cansar al personal. Si sigues adelante con él, no dudes en exponer cualquier cuestión e ir mostrando los avances para hacer aportaciones si lo consideras adecuado. Salu2. Antoni.
  6. Hola: Hasta donde yo se, y sobre esto no es que sepa mucho, la macro se seguirá ejecutando eternamente cada vez que transcurra el intervalo fijado a menos que: Cierres el evento con: Application.OnTime dTime, "Guarda",,False[/CODE] o salgas de Excel, ya que no vas a poder cerrar el libro. Si lo que quieres es guardar el libro cada 10 minutos, yo lo dejaría así: [CODE]Private Sub Workbook_Open() Application.OnTime Now + TimeValue("00:10:00"), "Guarda" End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean) Application.OnTime dTime, "Guarda",,False End Sub Sub Guarda() dTime = Now + TimeValue("00:10:00") ThisWorkbook.Save Application.OnTime dTime, "Guarda" End Sub[/CODE] Salu2. Antoni.
  7. Hola: En primer lugar, que yo sepa, no es posible mostrar un formulario que está en otro libro con la instrucción: UserForm1.Show[/CODE] Lo que si se puede, es ejecutar una macro: (Libro debe contener la ruta completa) [CODE]Application.Run "'" & Libro & "'!Mostrar_UserForm1" [/CODE] Por lo que, en Libro, deberías tener una macro así: [CODE]Sub Mostrar_UserForm1() Mostrar_UserForm1.Show End Sub[/CODE] ¡ Muy importante ! El libro que contiene el formulario, debe estar abierto. Por experiencia propia, te recomiendo independizar macros y formularios de los datos, es decir macros y formularios en un libro y los datos en uno o varios libros, procurando en lo posible no utilizar los eventos de hoja y libro en los libros que contienen los datos. Así, conseguimos una única versión del software y no ir arrastrándolo en todos los libros de datos creando versiones cada vez que modificamos uno de los libros de datos, aunque, sobre esto, hay opiniones para todos los gustos. Salu2. Antoni.
  8. Hola: Vale mas tarde que nunca. Sub CompararLibros() On Error Resume Next Set A = ThisWorkbook.Sheets("Hoja1") Set B = ThisWorkbook.Sheets("Hoja2") Set C = ThisWorkbook.Sheets("Hoja3") C.Cells.Clear B.Cells(1, 1).Select For X = 1 To A.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row B.Activate B.Cells.Find(What:=A.Cells(X, 1), After:=ActiveCell, LookIn:=xlValues, LookAt:=xlPart, _ SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, _ SearchFormat:=False).Activate If ActiveCell = A.Cells(X, 1) Then C.Activate C.Rows(1).Insert C.Cells(1, 1) = A.Cells(X, 1) C.Cells(1, 2) = "Cancelado" End If Next X End Sub [/CODE] Para la ejecución de esta macro es necesario un libro con tres hojas, [b]Hoja1[/b], [b]Hoja2 [/b]y [b]Hoja3[/b]. En [b]Hoja1 [/b]y [b]Hoja2 [/b]son para los datos, en la [b]Hoja3 [/b], los resultados. Los datos deben estar en la columna 1. Salu2. Antoni.
  9. Re: Traer datos de otro libro y mostrarlos en el libro activo Hola verzulsan: Gracias por los elogios y complementar la respuesta, todavía podemos apurar mas: Private Sub CommandButton1_Click() Application.ScreenUpdating = False '=============================================== Workbooks.Open ThisWorkbook.Path & "\Libro2.xls" Range("A1:A10").Copy Workbooks("Libro2.xls").Close '=============================================== '=============================================== Paste Destination:=ThisWorkbook.ActiveSheet.Range("C5") '=============================================== Application.ScreenUpdating = True End Sub[/CODE] Salu2. Antoni.
  10. Re: Traer datos de otro libro y mostrarlos en el libro activo Hola: ASÍ NO: Range("C5").Activate: ActiveSheets.Paste[/CODE] [b]ASÍ S[/b]I: [CODE]Range("C5").Activate: ActiveSheet.Paste[/CODE] Salu2. Antoni.
  11. Re: Traer datos de otro libro y mostrarlos en el libro activo Hola: Suponiendo que el botón se llama CommandButton1 Private Sub CommandButton1_Click() Application.ScreenUpdating = False '=============================================== Workbooks.Open ThisWorkbook.Path & "\Libro2.xls" Range("A1:A10").Copy Workbooks("Libro2.xls").Close '=============================================== '=============================================== ThisWorkbook.Activate Range("C5").Activate: ActiveSheet.Paste '=============================================== Application.ScreenUpdating = True End Sub [/CODE] Este código, cuando pulses el botón, copiará el rango "A1:A10" del libro "Libro2.xls" del mismo directorio al rango "C5:C14" de la hoja activa del libro que contiene el formulario. [size=4][color=red][b]Este código ha sido realizado, en su gran mayoría, con la grabadora de macros.[/b][/color][/size] Salu2. Antoni.
  12. Hola: Si subes los adjuntos como .xls, aumentarás tus posibilidades de éxito en la resolución de tus consultas. Repasa las normas del foro, están para tu beneficio. Salu2. Antoni.
  13. Hola: En mi modesta opinión tienes un problema de calificación de objetos. Pueden existir un número indeterminado de libros abierto, pero solo uno es el libro activo. El libro activo puede tener un número indeterminado de hojas, pero solo una es la hoja activa. En la hoja activa puede haber un número indeterminado de celdas, pero solo una es la celda activa. Por lo tanto cuando hablamos de ActiveCell nos estamos refiriendo a la celda activa, de la hoja activa, del libro activo. Cuando definimos un rango tal que Range("A1").Select, estamos convirtiendo en ActiveCell a la celda "A1" de la hoja activa del libro activo. Vamos a suponer que solo existe el procedimiento que has adjuntado, en el momento de ejecutar el procedimiento, tienes como libro activo al libro que llama al procedimiento, pero, al abrir el archivo xml el libro activo cambia al archivo xml, por lo que, cualquier referencia a ActiveBook, ActiveSheet, ActiveCell habrán cambiado a partir de ese momento. Si has de trabajar con los dos libros a la vez no te queda mas remedio que calificar los rangos de uno de ellos, anteponiendo el libro y la hoja a la que quieres referirte. Range ................................................................... dentro de la hoja activa del libro activo Sheets("MiHoja").Range .............................................. dentro del libro activo Workbooks("MiLibro.xls").Sheets("MiHoja").Range .............. para otro libro Para activar la celda "A1" : Workbooks("MiLibro.xls").Sheets("MiHoja").Range("A1").Activate (También vale .Select) Para activar la hoja "MiHoja": Workbooks("MiLibro.xls").Sheets("MiHoja").Activate Para activar el libro: Workbooks("MiLibro.xls").Activate Cuando activas un libro, se activan la última hoja y celda de ese libro que estaban activas la última vez que se convirtió en libro activo, lo mismo sucede con la hoja con respecto a la celda activa. Bueno, creo que si me explicado bien, no deberías tener problemas para recomponer el procedimiento. Salu2. Antoni
  14. Hola: Coloca en la hoja el siguiente códigol: Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next Hoja = ActiveSheet.Name If Target.Column = 1 Then For x = 1 To Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row For Each h In Sheets If h.Name = Trim(Target.Value) Then Found = True End If Next If Found = False And Len(Target.Value) > 0 Then Sheets.Add ActiveSheet.Name = Target.Value End If Next x End If Sheets(Hoja).Activate End Sub [/CODE] Esta macro, crea una hoja nueva por cada celda de la columna 1. Si modificas alguna celda, te creará una hoja nueva, pero no eliminará la anterior. Si al ir a crear la hoja, esta ya existiera, se ignora. Salu2. Antoni
  15. Hola: Adjunto archivo conformulario: "Como repetir filas al final de todas la páginas de un informe." Al abrir el archivo adjunto, se visualiza un formulario: .Se solicita el libro del que queremos imprimir el informe .Se crea, en el directorio actual, un copia del libro anteponiendo la fecha y la hora, y se utiliza como libro de trabajo. .Se cierra el libro, se abre el libro de trabajo, y se visualizan las hojas que hay en él en un listbox. .Seleccionar la hoja del listbox, se mostrarán los nºs de línea mayor y menor de la hoja seleccionada En este punto podemos modificar, de forma opcional, la configuración de la página, márgenes, cabecera, pie de página, etc... .Informar el intervalo de líneas a repetir al final de cada página. Al pulsar el bóton de "Play" .A partir de la configuración de la página, se añaden las líneas a repetir antes de cada salto de página. .Se reconfiguran de nuevo todos los saltos de página. .Se muestra la hoja con el resultado. .Hay una opción para borrar el libro de trabajo al salir de Excel. En ningún momento se modifica el libro original. Salu2. Antoni REPETIR_FILAS_FINAL_PAGINA.zip
  16. Hola MisterHP: Te adjunto un formulario con un semáforo en el que puedes controlar el tiempo de encendido de los colores. Para efectuar el cambio de luces, se juega con la superposición de imágenes, en tu caso, si no interesa hacerlo con imagenes, puedes usar la propiedad .Visible de los botones. Para controlar el tiempo, y dado que no hay un control Timer standard, se utiliza el metodo .OnTime del objeto Application. Verás que es bastante sencillo y no te costará demasiado adaptarlo a tus necesidades. Puedes arrancar tantos temporizadores como quieras para poder llevar controles paralelos. Te recomiendo que busques documentación sobre Application.OnTime., porqué aunque sencillo, tiene sus particularidades. Salu2. Antoni. SEMAFORO.zip
  17. Hola: Muchos de los miembros del foro todavía no tenemos Excel 2007 y no podemos leer los archivos .xlsm Sube el adjunto como .xls Salu2. Antoni.
  18. Hola: Prueba esta macro: Sub Añadir_Pagina() 'Modo vista de página ActiveWindow.View = xlPageBreakPreview 'Buscamos última fila (Sumamos 3 porqué las filas 29,30 y 31 están vacias) UltimaFila = ActiveSheet.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row + 3 'Copiamos fila 1-31 al final de la hoja Rows("1:31").Copy: Range("A" & UltimaFila + 1).Select: ActiveSheet.Paste 'Nueva área de impresión ActiveSheet.PageSetup.PrintArea = "$A$1:$K$" & UltimaFila + 31 'Se posiciona en LOCALIDAD de la última página Range("C" & UltimaFila + 6).Select End Sub [/CODE] Esta macro copia de la fila 1 a la 31 al final de la hoja y reconfigura el area de impresión. Salu2. Antoni.
  19. Hola: Un ComboBox no es mas que la suma de un TextBox y un Listbox. Si quieres, como ya te dije en la anterior respuesta, puedes usarlo como TextBox. No obstante, te envío otra versión sustituyendo el ComboBox por un TextBox. Tu pregunta de todas formas, me despista un poco, porqué en primer lugar no he visto código alguno dentro del formulario, y en segundo lugar y ya para terminar, supongo que sabes que los controles tienen un nombre que VBA asigna de forma automática que consiste en el tipo de control seguido de un número correlativo, pero que ese nombre se puede cambiar a voluntad y que en nada condiciona el nombre con el tipo de control, así por ejemplo, un TextBox que se genere como "TextBox1" le podemos poner de nombre "MiCódigo", "Clave", o "Pepe" o incluso "ComboBox1" y no por ello dejaría de ser un TextBox. En el formulario, yo cambié los nombres de los "TextBox1", "TextBox2" y "TextBox3", por "Codigo", "Stock" y "Existencia" respectivamente, a la imagen de la lupa "Buscar", y a la de la puerta "Salir". Salu2. Antoni. Copia II de Copia de textbox.zip
  20. Hola: Prueba buscar la última fila con LastRow = MiHoja.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row [/CODE] Si te sigue fallando, sube el archivo. Salu2. Antoni.
  21. Hola: Tranquilo verzulsan, no me ha molestado en absoluto el que me citaras, y puedes hacerlo las veces que te plazca, la indicación iba solamente con el afán de que no se produzcan malas interpretaciones que desvirtúen el significado de los aportes por no poner la totalidad de la cita. Saludos cordiales. Antoni.
  22. Hola: Me parece verzulsan que te has equivocado de adjunto, ya que lo enviado no se corresponde para nada con el tema que nos ocupa. Y por favor, cuando cites a otras personas, procura poner la cita completa, ya que las frases sueltas sacadas de contexto pueden no reflejar lo expresado realmente en esa cita. Salu2. Antoni.
  23. Hola: Lo que pides no tiene nada que ver con tu cuestión inicial, si lo que quieres es un buscador de nombres de archivo prescindiendo del tipo, hay que plantear el formulario de otra manera al que esta realizado, en una palabra, hay que hacerlo nuevo. Lo pienso y ya te diré algo. Salu2. Antoni.
  24. Hola: Prueba con esta macro a ver que tal: Dim A, B, C As Worksheet Dim PrimerError As Boolean Dim x, y, z As Long Sub CompararLibros() On Error Resume Next Set A = ThisWorkbook.Sheets(1) Set B = ThisWorkbook.Sheets(2) Set C = ThisWorkbook.Sheets(3) C.Cells.ClearContents C.Activate A.Rows(1).Copy C.Rows(1) z = 1 For x = 1 To A.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row PrimerError = False For y = 1 To A.Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column If A.Cells(x, y) <> B.Cells(x, y) Then If PrimerError = False Then PrimerError = True z = z + 1 A.Rows(x).Copy C.Rows(z) End If C.Cells(z, y).Font.Color = vbRed C.Cells(z, y).Font.Bold = True End If Next y Next x End Sub [/CODE] La hoja de diferencias debe estar creada, no importa el nombre, pero debes crearla después de las de datos y no puede haber ninguna hoja mas o asegúrate que es la hoja nº 3 en orden de creación. Las de datos, deben ser la 1 y la 2. Salu2. Antoni.
  25. Hola: Te adjunto lo que has pedido, supongo. He sustituido el textbox correspondiente al código, por un combobox, y en el he cargado todos los artículos para que los puedas escoger de la lista y no tengas que escribirlos. No obstante, funciona igual que un textbox, si quieres puedes entrar el código de forma manual, pero entondes para buscar los datos, deberás clickar en la imagen de la derecha (lupa). Salu2. Antoni. Copia de textbox.zip
×
×
  • Create New...

Important Information

Privacy Policy

Ayuda Excel - Madrid, Madrid, ES - Valorada por 6254 personas - Aprender Excel - Total: 4.7 / 5