Jump to content

AlexanderS

Moderators
  • Content Count

    1,356
  • Joined

  • Last visited

  • Days Won

    54
  • Country

    Costa Rica

Everything posted by AlexanderS

  1. Bueno eso ya es un proceso normal de excel y el inicio depende de los recursos que este usando tu computadora en ese momento, por eso puede variar, y claro al inicio se ve la última hoja en la que estabas cuando guardaste el libro, si tu macro al ejecutarse cambia de hoja pues veras por un instante la última hoja abierta y después cambiará a la que indicaste en tu macro. Claro es más notorio cuando en tu código hay instrucciones como .Select o .Activate, las cuales son totalmente prescindibles y yo no recomiendo usar. En resumen no hay forma de evitar ese parpadeo inicial puesto que los eventos de Workbook_Open se ejecutan después de toda la carga del excel. (Al menos que yo sepa) Saludos
  2. @Marcos14 este tema ya lo solucionaste o está pendiente ?, tengo una forma bastante interesante que utiliza el registro de windows para almacenar datos. Saludos
  3. Hola @JDG no estoy seguro si te entendi pero puedes probar colocando al principio de tu código application.ScreenUpdating=False Saludos
  4. Version 1.0.0

    8 downloads

    Resulta que hace unos años me tope con el problema de que en mi trabajo habían varios compañeros con un archivo con macros que yo les había pasado, pues resulta que el código del módulo tenia algunos errores o debía cambiar alguna parte del código. Esto era un problema ya que como eran varias personas tenia que ir una por una a modificar el código del modulo para actualizarlo ya que no podía enviar el archivo por correo porque cada uno tenia datos diferentes ingresados en el libro. Pero teníamos algo en común, todos estábamos en la misma red, entonces se me ocurrió el código que explico a continuación: 1. En el archivo original se debe copiar el código en el módulo "Thisworkbook". 2. Debe haber una carpeta de red a la que todos los usuarios tengan acceso (ya sea una red local o por VPN). 3.Crear una carpeta con cualquier nombre donde colocaremos los archivos de actualización. 4. Los archivos de actualización deben ser en formato .txt y el nombre del archivo debe ser el mismo que el del módulo a actualizar. 5. Dentro de los txt se debe colocar el número de versión ejemplo '1.01, con un apostrofe al inicio.(El código solo se actualiza si el número de la versión del txt es mayor que el del modulo del libro) 6. El código actualizara los módulos automáticamente y no afecta la información que este dentro del libro. Si no existe el módulo el código lo creara. El código se ejecuta automáticamente al abrir el archivo y se debe habilitar la opción de Confiar en el acceso al modelo de objetos de proyectos VBA en la configuración de Centros de Confianza -> Configuración de Macros. En el ejemplo adjunto, se debe descomprimir y abrirlo por primera vez se actualizaran los módulos, ya que la carpeta por defecto es la misma que donde se guardo el archivo. Saludos y espero sea de funcionalidad para alguien.
  5. Hola @OAGARCIA, es cierto lo que nos comenta @avalencia, el foro es para responder consultas puntuales y aprender, ese aporte cuando lo realice fue porque tenia un problema similar al tuyo y decidí compartirlo en el foro para que al que le fuera de utilidad pudiera aprovecharlo. Esta ahí para que cualquiera pueda usar mi idea y transformarla a su gusto, ademas aprender de ello. De igual forma no es la primera vez que me plantean lo de la actualización de varios módulos con ese código, así que aprovechando que llevo tiempo sin subir algún aporte al foro, voy a pensar en algo y ya te aviso cuando lo tenga en la sección de aportes, eso si incluirlo y adaptarlo a tu archivo deberás intentarlo tu. Saludos a ambos!!
  6. Es es fácil simplemente has de agregar al inicio del código del botón una linea así: Me.CommandButton1.Visible = False Me.CommandButton2.Visible = False Me.CommandButton3.Visible = False Y así para todos los botones o controles que no quieres que aparezcan. Saludos @Marcos14 y @JSDJSD
  7. @Marcos14, lo que pides no es tan sencillo pero es posible, en el adjunto esta el formulario y funciona de la siguiente forma: Para mover los números debes dar click encima de uno de ellos no debes mantener presionado basta con un simple click encima Con el mause te mueves por la imagen de los círculos y cuando estés en la posición que quieras debes presionar de nuevo un click sobre el numero no sobre la imagen En caso de que quieras eliminar uno de los números que moviste debes dar un dobleClick sobre este, con eso volverá a colocarse a la derecha en la lista. Ahora se que este era un ejemplo y para trasladarlo a otro libro debes tomar en cuanta lo siguiente: Tuve que crear un modulo de clase (ClassControl), este contiene el código para que los controles funcionen, debes copiar este modulo competo. También el modulo 1 contiene código para el funcionamiento del formulario. El Formulario debe llamarse (frmbiomicroscopia), si cambias el nombre debes modificar el código del modulo de clase. No importa la cantidad de Etiquetas que crees el código se adapta. Los controles donde van los números deben ser Labels de lo contrario el código no funcionara. Como ves debes tener cuidado si lo vas a trasladar a otro libro ya que el código no esta solo en el formulario. Comentas, saludos. Libro1 (2).xlsm
  8. Hola @Marcos14 no entendí muy bien tal vez si explicas un poco la idea, cuando deben pasar las marcas al darle click encima?, y como deben verse. Y también adjunta un excel con el formulario que tienes para no tener que crearlo desde 0. Saludos.
  9. Hola @nickmartinez, te adjunto una opción simple renombrado columnas y usando condicionales. Saludos. Libro1.xlsx
  10. @Marcos14, para trabajar con los Ítems dentro de un Treeview se utilizan el evento NodeClick, él detectará cuando demos click sobre uno de los ítems. Ejem: Private Sub TreeView1_NodeClick(ByVal Node As MSComctlLib.Node) Me.TextBox1 = Node.Text End Sub Intenta colocar dentro de ese evento node. después de el punto el IDE de VBA te dará sugerencias sobre las instrucciones que puedes utilizar. Saludos.
  11. Con gusto!! cualquier otra consulta, no dudes en preguntar. Saludos
  12. No hay problema, es un gusto poder ser de ayuda. Ahora bien hay un problema con el código, el ciclo for, ya que tienes espacios en blanco entre tus filas y la columna C no es capas de determinar la ultima fila con datos puesto que esta en la columna B, hay que usar otro truco para determinar la ultima fila con datos. Después cada una de las jerarquías o categorías deben ser evaluadas por separado. Mira el código, creo que esta mas claro ahora, incluso podrías intentar agregar una categoría mas para practicar. Comentas Saludos. estudio.xlsm
  13. Con un ejemplo siempre es mejor!. El código esta bien el problema es como tienes la fecha y el nombre de la hoja, la fecha en la celda tiene formato 10/7/2020 y la hoja se llama 10-7-2020 por lo que no son iguales, en los nombres de las hojas no se admite el carácter "/". Prueba ahora con el archivo. Comentas , saludos. Informe Ejecutivo de Actividades Diarias.xlsm
  14. Y con el mensaje : Sub guardar() Application.ScreenUpdating = False On Error Resume Next Set hoja = Sheets(Range("d13")) If Err.Number = 9 Then Sheets("ingreso").Copy After:=Sheets(1) ActiveSheet.Name = Range("d13") Sheets("ingreso").Select Application.ScreenUpdating = True Range("c19:e38").ClearContents MsgBox ("guardado con éxito!!!!") Else MsgBox "Fecha del informe ya existe y no se puede guardar" End If End Sub Saludos
  15. Se me fue ese detalle con el nombre de la hoja no es Sheets("Prueba3"), lo correcto es Sheets(Range("d13")) Solo debes copiar tu código dentro del que que yo te pase, así: Sub guardar() Application.ScreenUpdating = False On Error Resume Next Set hoja = Sheets(Range("d13")) If Err.Number = 9 Then Sheets("ingreso").Copy After:=Sheets(1) ActiveSheet.Name = Range("d13") Sheets("ingreso").Select Application.ScreenUpdating = True Range("c19:e38").ClearContents MsgBox ("guardado con éxito!!!!") End If End Sub Pruebalo así y me comentas. Saludos
  16. Correcto solo que ahora la llave de relación seria "e" & cel.Row Por ejemplo Me.TreeView1.Nodes.Add "e" & cel.Row, tvwChild, "R" & cel.Row, Text:=cel También no se si lo tenias claro, el porque uso cel.row, pero por las dudas es porque las llaves deben ser siempre únicas entonces como los números de las filas no se van a repetir los utilizo con esa instrucción, con lo cual por ejemplo la llave de la RITALINA es "E7" ya que se encuentra en la celda #7 y le estoy colocando una "e" al principio. Espero no confundirte mucho con mis explicaciones. Saludos.
  17. Hola @MIJAF35, puedes encerrar tu código dentro de este: On Error Resume Next Set hoja = Sheets("Prueba3") If Err.Number = 9 Then ' Aqui coloca tu código End If Saludos.
  18. @Marcos14, para crear las llaves es necesario incluir texto no pueden ser simplemente números, por lo cual incluí una letra antes. La "H" pertenece a las categorías principales y la "E" a las subcategorias. Y por son "H" y "E" simplemente por que fue lo primero que se me ocurrió pudo haber sido cualquier otra letra o palabra. Saludos
  19. Hola @Marcos14, te dejo el adjunto. Del control básicamente lo que debes saber es que se basa en jerarquías, utilizamos llaves para categorizar cada elemento ejemplo: 'Creamos categorias principales Me.TreeView1.Nodes.Add Key:="llave1", Text:="Elemento1" Me.TreeView1.Nodes.Add Key:="llave2", Text:="Elemento2" Aquí las llaves son "llave1" y "llave2", ahora si queremos agregar Subcategorias utilizamos esas llaves como relación: Me.TreeView1.Nodes.Add "llave1", tvwChild, "E1", Text:="Estoy dentro de ELEMENTO1" Me.TreeView1.Nodes.Add "llave2", tvwChild, "E2", Text:="Estoy dentro de ELEMENTO2" Fíjate que la linea de código es diferente a la de arriba, aquí "llave1" y "llave2" se utilizan para indicar a que "Elemento" va a pertenecer y donde coloco "E1" y "E2" estas son las llaves de estas nuevas lineas Por el momento queda así: Si necesitas una 2 subcategoria tendrías que copiar las misma linea anterior pero utilizando las llaves "E1" o "E2" Me.TreeView1.Nodes.Add "E1", tvwChild, "H1", Text:="Otra SubCategoria" Ahora en mi ejemplo utilizo un ciclo for para poder cargar los datos, analiza el código y cualquier duda aqui estamos. Saludos. vademecum.xlsm
  20. Hola @Dani2020, excel solo puede tener una fila o columna inmovilizada en la hoja, no es posible inmovilizar 2 filas al mismo tiempo. Saludos
  21. Hola @Maria_80, puedes declarar una variable de tipo Workbook: Caso 1: Dim libro As Workbook Set libro = ActiveWorkbook ... (resto de código) libro .SaveCopyAs (resto de código) Caso 2: libro .Sheets("Hoja1").Copy libro .SaveCopyAs Filename:= ... (resto de código) libro .Close Saludos
  22. Hola @Manuel TR, prueba modificando el código así: Sub Redondeo() 'REDONDEO For i = 8 To Cells(8, "B").End(xlDown).Row 'los datos a redondear se encuentran de la fila 8 hasta la fila 20 'Redondea en la columna 5 - los datos que se encuentran en la columna 5 Cells(i, 5).Value = Round(Cells(i, 5).Value, 2) 'redondea a 2 dig 'Redondea en la columna 6 - los datos que se encuentran en la columna 6 Cells(i, 6).Value = Round(Cells(i, 6).Value, 2) 'redondea a 2 dig 'Redondea en la columna 7 - los datos que se encuentran en la columna 7 Cells(i, 7).Value = Round(Cells(i, 7).Value, 2) 'redondea a 2 dig Next i End Sub Comentas, saludos.
  23. Hola @ianpavlovic, en tu caso tomando en cuenta que pueden ser muchos registros, tal vez una macro sea tu mejor opción. Prueba el ejemplo y comentas. Saludos. Ejemplo Transponer Macro.xlsm
×
×
  • Create New...

Important Information

Privacy Policy