Jump to content

MauriciodeAbreu

Members
  • Posts

    97
  • Joined

  • Last visited

  • Country

    United States

Everything posted by MauriciodeAbreu

  1. Buenas noches estimados. He estado un poco liado, por lo que no he podido postear. He logrado hacer lo siguiente a partir de un codigo que encontre, pero se me complica al querer agregar los seriales de la otra tabla. Dim Fecha, DateCells As Date Dim X, Y, Z, W, uf, Filas As Integer Dim Skip, Adding As Boolean Dim rng As Range Dim InputRng As Range Dim OutRng As Range Dim xRow As Integer Dim xCol As Integer Dim xArr As Variant Dim iRow, iCol As Integer Sub ImprimirSeriales() ImprimirSerialesTabla Sheets("Operativas")': Cells.Select: Selection.Columns.AutoFit: Adding = True ': ActiveSheet.Move _ After:=ActiveWorkbook.Sheets(ActiveWorkbook.Sheets.Count) ImprimirSerialesTabla Sheets("Inoperativas"): Cells.Select: Selection.Columns.AutoFit End Sub Private Sub ImprimirSerialesTabla(Tabla As Worksheet) Sheets("Operativas").Activate Fecha = Format(Date, "dd-mm-yyyy") With Tabla uf = .Range("B" & Rows.Count).End(xlUp).Row For X = 2 To uf If .Range("C" & X) = vbNullString Then MsgBox "Usted llego al final de la tabla." & vbNewLine & "Y no hay registrso con la fecha de hoy": Exit Sub DateCells = Format(.Range("C" & X), "dd/mm/yyyy") If Fecha = DateCells Then If Adding = True Then AgregarInoperativos: Exit Sub Set InputRng = ActiveSheet.Range(Cells(X, 2), Cells(uf, 2)) 'Sheets("Operativas") xRow = 44 'Cantidad de filas por columna Worksheets.Add.Name = "Seriales " & Fecha 'Crear hoja nueva con nombre definido y la fecha del dia en curso Set OutRng = Sheets("Seriales " & Fecha).Range("A2") Set InputRng = InputRng.Columns(1) xCol = InputRng.Cells.Count / xRow ReDim xArr(1 To xRow, 1 To xCol + 1) Z = InputRng.Cells.Count - 1 For i = 0 To InputRng.Cells.Count - 1 ' Z = InputRng.Cells.Count - 1 xValue = InputRng.Cells(i + 1) iRow = i Mod xRow W = iRow iCol = VBA.Int(i / xRow) Sheets("Seriales " & Fecha).Range(Cells(1, 1), Cells(1, iCol + 1)) = "Seriales" xArr(iRow + 1, iCol + 1) = xValue Next OutRng.Resize(UBound(xArr, 1), UBound(xArr, 2)).Value = xArr Exit Sub End If Next End With End Sub Por lo que recurro a ustedes, con la esperanza de que me den alguna luz de como completar el proceso. Agradecido como siempre por las ideas, o ayuda que me puedan brindar.
  2. Buenas dias amigos. Vengo con un problemita que de seguro es simple, pero no doy con la solucion. Necesito que se busque en una columna la fecha del dia en curso, y al encontrar la fecha, copie los valores a la izquierda (es decir, los Seriales), en una hoja nueva bajo el nombre de "Seriales y la fecha del dia en curso", pero, al copiar los datos, debe dividirlo cada 44 filas (ya que cebe tener encabezado) y brincar a la fila inicial de la siguiente columna, y asi sucesivamente e imprimir esa hoja nueva. Dejo un archivo de ejemplo. Agradecido de antemano por vuestra ayuda. Busqueda creacion e impresion.rar
  3. Por cierto Antoni. Como seria para cambiar el texto del primer item dependiendo si esta seleccionado todo o no ¿? Agradecido nuevamente por la ayuda
  4. ¡Me quito el sombrero Antoni!, al ver tu código pienso en lo largo del mío para hacer lo mismo jajajajajaja. Como me falta experiencia y conocimiento... 😌 Agradecido infinitamente por tu ayuda y aporte. Un abrazo desde Venezuela. PD. Tema solucionado.
  5. Bueno, subo el archivo de lo que logre hacer. Tal vez le sirva a alguien. Que hace: 1- Se puede seleccionar todos los Ítems del ListBox, al seleccionar el primer Ítem de la lista. 2- Se puede deseleccionar todos los Ítems del ListBox, al deseleccionar el primer Ítem de la lista. 3- Se puede deseleccionar cualquier ítem que haya sido seleccionado mediante el primer Ítem de la lista. 4- Se puede seleccionar cualquier ítem que haya sido Deseleccionado mediante el primer Ítem de la lista. 5- Al seleccionar todos los Ítems de manera individual, el texto del primer Ítem cambia a "Deseleccionar Ítem" y se tilda el primer Ítem. 6- Al estar todos los Ítem seleccionados e ir deseleccionando los Ítems de manera individual, el texto del primer Ítem cambia a "Seleccionar Ítem" y se destilda el primer Ítem. 7- Al estar deselecionados todos los Ítems, e ir seleccionando todos los Ítems uno a uno, el texto del primer Ítem cambia a "Deseleccionar Ítems". Aun así, me gustaría, y espero con ansias ver vuestras propuestas, para así poder aprender mas, que aun estoy crudo en el tema de VBA. Un fuerte abrazo... Prueba de seleccion de Item Version 2.0.xlsm
  6. Creo haber resuelto el problema. Tal vez no de la manera mas elegante o correcta, pero en las pruebas preliminares ha funcionado. Private Sub lstVisibles_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) If opt_DobleClick = True Then Exit Sub If Me.lstVisibles.Selected(0) = True And ThisWorkbook.Sheets("Hoja1").Range("A2").Value = vbNullString Then ThisWorkbook.Sheets("Hoja1").Range("A2").Value = "Activado" For i = 1 To lstVisibles.ListCount - 1 lstVisibles.Selected(i) = True Next i End If If Me.lstVisibles.Selected(0) = True And ThisWorkbook.Sheets("Hoja1").Range("A2").Value = "Activado" Then ThisWorkbook.Sheets("Hoja1").Range("A2").Value = "Activado" For i = 1 To lstVisibles.ListCount - 1 If lstVisibles.Selected(i) = False Then lstVisibles.Selected(i) = False Next i End If If Me.lstVisibles.Selected(0) = False And ThisWorkbook.Sheets("Hoja1").Range("A2").Value = "Activado" Then ThisWorkbook.Sheets("Hoja1").Range("A2").Value = "Desactivado" For i = 1 To lstVisibles.ListCount - 1 lstVisibles.Selected(i) = False Next i End If If Me.lstVisibles.Selected(0) = False And ThisWorkbook.Sheets("Hoja1").Range("A2").Value = "Desactivado" Then For i = 1 To lstVisibles.ListCount - 1 If lstVisibles.Selected(i) = True Then lstVisibles.Selected(i) = True Next i End If If Me.lstVisibles.Selected(0) = True And ThisWorkbook.Sheets("Hoja1").Range("A2").Value = "Desactivado" Then ThisWorkbook.Sheets("Hoja1").Range("A2").Value = "Activado" For i = 1 To lstVisibles.ListCount - 1 lstVisibles.Selected(i) = True Next i End If End Sub Creo que solo faltaría agregar un código que al des tildar todos los Ítem, des tilde el Ítem cero. Independientemente de este resultado, me gustaría saber si tienen o existe un mejor o mas simple método de hacerlo. U alguna otra idea para lograr el objetivo ¿? Agradecido de antemano por vuestros comentarios y ayuda.
  7. Buenas Antoni. Subo archivo de prueba. Gracias!! Prueba de seleccion de Item Version 1.0.xlsm
  8. Agrego mas informacion al respecto. Estoy usando un formulario con un ListBox MultiSelect = frmMultiSelectMulti para cargar todas las hojas del libro activo. La idea en principio es que el primer Ítem (cuyo nombre es "Hojas del libro") se use como Switch para seleccionar o deseleccionar todos los demás ítem del ListBox. Lo cual lo logro con el evento MouseUp o DblClick, con este ultimo me permite sin problema seleccionar algunos ítem sin que estos se destilden (pero hay que darle doble click, y la idea es no tener que dar doble click). Y con el evento MouseUp no me lo permite. Ejempo: Private Sub lstVisibles_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) If Me.lstVisibles.Selected(0) = True Then For i = 1 To lstVisibles.ListCount - 1 lstVisibles.Selected(i) = True Next i Else For i = 1 To lstVisibles.ListCount - 1 Me.lstVisibles.Selected(i) = False Next i End If End sub Por eso os pregunto si hay alguna manera de saber cuando se destilda el item, ya que al no estar seleccionado el primer item, no me permite seleccionar los otros item. No se si logro explicarme.
  9. Estimados amigos. Me surge una duda, existe una forma de saber si se ha deseleccionado un Item de un ListBox ¿? Es decir, si tengo el primer item de un ListBox seleccionado, y lo destildo, hay manera de registrar esta acción para poder ejecutar una macro ¿? Agradecido de antemano por vuestra ayuda.
  10. Buenas Héctor, Tienes razón, no había tomado en cuenta la traducción automática... 🙄 Y en efecto es mejor apoyarse en el documento en ingles 👍, o digamos no traducido. Nuevamente gracias.
  11. Hola Héctor, he estado leyendo la traducción del enlace que me has dado. Y para ser franco, de entrada me pareció complejo. Después de una rato de lectura, realice una búsqueda sobre el tema en español. como para tener mas clara la cosa, porque estaba medio enredado. Y me tope con esta pagina, que sin mucha vuelta pone un ejemplo, el cual "aclaro"..., de alguna manera mi duda. OJO con el ejemplo, que yo de entrada no me di cuenta de que hay un error en el código. En donde ponen el código del modulo (estándar), colocaron Cass1 y es Clase1, un pequeño pero crucial detalle. En fin, después de hacer unas pruebas con el ejemplo en cuestión (que por cierto, es interesante), realice los cambios necesarios para lograr el objetivo. En el Modulo estándar se debe colocar: Option Explicit Dim ObjectHoja As New Clase1 Sub RefrescarFormulario() Set ObjectHoja.RefreshForm = Application End Sub En el modulo de clase se coloca: Option Explicit Public WithEvents RefreshForm As Application Private Sub RefreshForm_SheetActivate(ByVal Sh As Object) UserForm1.TextBox1 = ActiveSheet.Name End Sub Y en UserForm_Initialize, se coloca el nombre de la macro (modulo estándar), en este caso la macro que se llama "RefrescarFormulario" o Call RefrescarFormulario Y eso es todo. Aclaración: Si cambian el nombre de modulo de clase, recuerden hacer lo mismo en el modulo estándar. Muchísimas gracias Héctor, no tienes idea como lo agradezco, podemos marcar el tema como solucionado, Saludos...
  12. Buenas Héctor, muchas gracias, leeré, y releeré y si me quedan dudas lo leeré de nuevo, y cualquier duda pregunto 👍
  13. Buenas Antoni, me encantaría subirlo, pero estoy muy crudo, apenas estoy empezando a crear las macros que llevara el complemento (y me tope con esta dificultad), y para evitarme tener a la vista (mientras trabajo) tantos Modulos y formularios, pretendo colocar cada herramienta en archivo separados, para después unir todo en un solo archivo, hacer lo propio en XML y convertir el archivo en Add-in. Pero básicamente es un formulario (no tiene nada especial), y al cambiar de hoja, me gustaría que evaluara nuevamente si hay o no objetos ocultos en la hoja activa (primer CheckBox). Ya que cuando inicia el formulario hace la evaluación por hoja y libro (segundo CheckBox). Es decir, la detección de cambio de hoja, detona la ejecución de la macro que actualiza los dos CheckBox Trate de ver si el TextBox me tomaba el nombre de la hoja activa en tiempo de ejecución (al ir cambiando de hoja), probé con ActiveSheet.Name, pero como era de esperarse no funcionó. Busque en la red, y encontré el método "Form.Refresh", pero segun entiendo solo aplica para Access, mas allá de esto no encuentro informacion relevante que me ayude a avanzar. La otra alternativa (poco elegante y practica) era un ComboBox que cargue las hojas del libro activo, pero no tiene gran sentido y pierde un poco la gracia, pero si no consigo como hacerlo, tendrá que ser así, y tendré que colocar como modal el formulario, lo cual tampoco me hace gracia. Creo que lo importante seria conseguir que reconozca el cambio de hoja, pero estoy muy tierno en VBA :-/. Subo un formulario X, ya que realmente me encuentro tratando de hacer que haga lo que quiero y no he hecho mas nada. Si alguien tiene alguna idea de como lograrlo se lo agradecería mucho. Saludos. Prueba1.xlsm
  14. Hola Haplox. Ciertamente se que cuento con esa opcion. Pero lo que estoy haciendo es un complemento (un grupito de herramientas en el Ribbon para tenerlas a la mano), por tanto no se trabajara directamente sobre la hoja del complemento, sino, sobre otros libros que no tienen ni las macros ni el formulario. Y al cambiar de hoja, necesito que unos dos o tres CheckBox actualicen su estado (true/false) dependiendo de ciertas condiciones. Es por eso que me surge la duda. Agradecido por tus comentarios
  15. Recurro a ustedes con la siguiente duda. Estoy haciendo un complemento, pero tengo un problema. Necesito que el formulario activo detecte el cambio de hoja, para que se ejecute una macro. Existe alguna forma de realizar esto ¿? Gracias de antemano
  16. Pido disculpas, he cometido el error de mencionar los otros objetos, los únicos objetos que quiero ocultar completamente en la hoja activa, son los comentarios . Se como ocultar los comentarios en el libro, pero cuando trato de hacerlo en la hoja activa solo logro hacer que se oculte el cuadro del comentario, mas no logro que se oculte el indicador del comentario, que es exactamente hasta donde deseo llegar. Es decir, llegar a ocultarlo como si usara Application.DisplayCommentIndicator = xlNoIndicator. Es posible hacerlo¿? Agradezco de antemano vuestra ayuda, y pido disculpas nuevamente por mi error al escribir.
  17. Amigos míos, tengo una duda. Existe una manera de mostrar y/o ocultar los objetos (control ActiveX, controles de formulario, comentarios, etc.) en la hoja activa ?¿ Se como ocultar los objetos en el libro, pero hacerlo en la hoja activa no doy con la solucionen. Agradecido de antemano por vuestra ayuda. Saludos.
  18. Saludos Antoni!! Infinitas gracias, era justo lo que buscaba. 👍 Tema resuelto. Un abrazo.
  19. Estimados amigos... Hoy vengo con una interrogante, donde puedo conseguir una macro para obtener los FaceId ¿? He probado muchas de la red, y de todas las que he probado dos o tres de ellas se detienen en ActiveSheet.Paste, y no entiendo el motivo. Este es una de las macros que se detiene en ActiveSheet.Paste: https://excelforo.blogspot.com/2014/12/vba-listar-los-iconos-que-corresponden.html Espero me puedan echar una mano con esto. De preferencia macros, no me gusta mucho la idea de instalar Add-in por desconfianza, a no ser que ustedes la recomienden. Saludos.
  20. Buenos dias compañeros, nadie tiene idea del porque deja de funcionar el contador del aviso de cierre cuando esta funcionando el metodo OnTime del BackUp ¿? Agradecido de antemao por vuestra ayuda
  21. Anexo el archivo de ejemplo. Si anulo el llamado a la macro AutoBackUp funciona bien, pero al activarlo deja de funcionar. Prueba Inactividad y BackUp.xlsm
  22. Muchas gracias Antoni por la corrección y por confirmar lo que habia asumido. El asunto es que... Tengo el metodo Ontime para determinar la inactividad y cerrar Sesion, el cual funciona perfecto. Si mal no recuerdo el codigo es de Hector Miguel. Pero cuando agrego al libro (archivo) el metodo OnTime para hacer el BackUp automatico, el aviso de cierre de sesion del primer metodo (inactividad) no se cierra a los 30 segundos. Es decir, deja de funciona como lo venia haciendo. Este es el codigo del mensaje que deja de funcionar cuando esta el otro metodo en el libro, no se cierra a los 30 segundos. Sub Cerrar_O_No() Select Case CreateObject("WScript.Shell").Popup("Se ha detectado falta de actividad en el Modulo." & vbCr & "¿Desea cerrar la Sesion por inactividad?" & vbCr & "Tiene " & Espera & " segundos para responder...", Espera, "Monitor de actividad...", 4 + 32) Case -1, 6: Permanecer = False Case 7: Permanecer = True End Select End Sub El codigo completo es este: === en el modulo de codigo del libro [ThisWorkbook] === Private Sub Workbook_Open() Permanecer = True: Mensaje_Inicial: ChecarActividad End Sub Private Sub Workbook_SheetSelectionChange( _ ByVal Sh As Object, ByVal Target As Range) Permanecer = True End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean) Permanecer = False: Cerrando = True: ChecarActividad End Sub === en un modulo de codigo 'normal' === Option Private Module Public Permanecer As Boolean, Cerrando As Boolean, Tiempo As Double Public MensajeOpen As Boolean Public Const EstaMacro As String = "ChecarActividad" Public Const Lapso As String = "00:10:00" '<= para 10 minutos cambialo a: "0:10:00" Public Const Espera As Long = 30 'el tiempo en segundos que se espera el mensaje por una respuesta del usuario Sub Mensaje_Inicial() CreateObject("WScript.Shell").Popup _ "Este Modulo es monitoreado, despues de un lapso de " & Lapso & " minutos de inactividad se cerrara la sesion activa.", Espera, "Aviso importante" End Sub Sub ChecarActividad() If Cerrando Then GoTo Salir If Not Permanecer Then Cerrar_O_No Tiempo = Now + TimeValue(Lapso) Salir: On Error Resume Next Application.OnTime earliesttime:=Tiempo, procedure:=EstaMacro, schedule:=Permanecer If Cerrando Then Exit Sub If Not Permanecer _ Then ThisWorkbook.Close True _ Else Permanecer = False End Sub Sub Cerrar_O_No() ' Este codigo lo he modificado para que sea si y no Select Case CreateObject("WScript.Shell").Popup("Se ha detectado falta de actividad en el Modulo." & vbCr & "¿Desea cerrar la Sesion por inactividad?" & vbCr & "Tiene " & Espera & " segundos para responder...", Espera, "Monitor de actividad...", 4 + 32) Case -1, 6: Permanecer = False Case 7: Permanecer = True End Select End Sub Codigo Original Aqui , ya que realice algunos cambios. Cual sera el problema por el cual deja de funcionar este mensaje cuando esta el otro metodo en e mismo libro ¿? Agradecido de antemano por vuestra ayuda.
  23. Buenos dias estimados... Tengo la siguiente duda. ¿Es posible tener dos eventos (independientes) OnTime trabajando simultaneamente en el mismo libro? Pongo un ejemplo: El primer evento OnTime comprueba la actividad en el libro, y al tener 10 minutos de inactividad cierra el libro. El segundo evento OnTime realiza un backup del libro cada 30 minutos. Ambos eventos estan en modulos separados. Agradecido de antemano por vuestros consejos y ayuda
  24. Buenas tardes amigos. He realizado una pestaña personalizada con sus respectivas botones y macros asignadas a cada uno de ellos. También he logrado ocultar el menú del Ribbon de Excel. Con esto no tengo problemas ya que ambos funcionan perfectamente. Pero adicionalmente a lo anterior expuesto, quiero que los botones de cada grupo de mi pestaña "Modulo Egresos e Ingresos" (nombre de la pestaña personalizada), se oculten o muestren en función de las hojas activas. Por ejemplo, para iniciar mi proyecto hay que ingresar usuario y clave (todas las hojas están ocultas menos la hoja Principal donde está el menú de ingreso), y dependiendo del usuario ingresado, se muestran un grupo de hojas, a excepción de cuando se ingresa con el usuario Administrador que muestra todas las hojas ocultas del proyecto. Así que, cuando el usuario ingresa sus datos en el botón de Registro Salidas del menú (hoja Principal), solo le mostrara dos hojas, la hoja Reg. Salidas y la hoja Salidas, y es aquí donde deseo que los botones del grupo "Modulo Salidas" de la pestaña personalizada, se activen y los demás se desactiven... Y cuando ingrese otro usuario, y este solo vea las hojas Reg. Entradas y Entradas, deseo hacer que el grupo de botones de la pestaña personalizada ("Modulo Entrada") se activen y los demás botones se desactiven... He tratado, pero no logro hacer exactamente lo que necesito. Subo un archivo de ejemplo (sin el menú de ingresos) para que puedan entender mejor lo que intento hacer. 1- Si abren el archivo, verán que los botones del grupo "Modulo Salida" de la pestaña personalizada, se muestran en la hoja Salidas y no en las otras hojas. 2. Ahora!!, si hacen visible la hoja Usuarios (hoja de control para saber si el usuario que actualmente está logeado es el Administrador), verán que los botones no se muestran en todas las hojas a menos que vayan a la hoja Salidas, y después a cualquier otra hoja. Ahí, y solo ahí, logro hacer que los botones antes ocultos, ahora se mostraran en todas las hojas, 3- Si ocultan nuevamente la hoja Usuarios, verán que los botones se ocultan automáticamente en todas las hojas menos en la hoja Salidas. 4- La idea es que solo el administrador (quien ve la hoja Usuarios), tenga activo todos los botones, y los demás usuarios solo los botones que les pertenecen a cada grupo de hojas. No sé si logre explicarme. Agradecido de antemano por la ayuda que me puedan brindar Saludos Prueba memu.xlsm
×
×
  • Create New...

Important Information

Privacy Policy