Jump to content

Macro para hojas Libro ??


Recommended Posts

Hola buenas.

Tengo esta macro que quisiera que se ejecute en hojas determinadas del libro

Private Sub CommandButton1_Click()

Dim NX As Integer, N2 As Integer
Dim CX As Integer, C2 As Integer, SEL As Integer

If Not IsNumeric(TextBox1) Then
   MsgBox "Cantidad X incorrecta"
   Exit Sub
End If
If Not IsNumeric(TextBox2) Then
   MsgBox "Cantidad 2 incorrecta"
   Exit Sub
End If
If CheckBox1 Then Combinar
Application.ScreenUpdating = False
NX = CInt(TextBox1)
N2 = CInt(TextBox2)
For y = [B18] + 3 To 4 Step -1
   CX = 0: C2 = 0: SEL = 0
   For x = 0 To 13
      If ListBox1.Selected(x) Then
         SEL = SEL + 1
         If Cells(x + 1, y) = "X" Then CX = CX + 1
         If Cells(x + 1, y) = "2" Then C2 = C2 + 1
      End If
   Next
   If SEL > 0 Then
      If Not (CX = NX And C2 = N2) Then
         Cells(1, y).Resize(14, 1).Delete shift:=xlToLeft
         [B18] = [B18] - 1
      End If
   End If
Next
Application.ScreenUpdating = True
End Sub

 

Un Saludo.

Link to comment
Share on other sites

eugeniocol

 

Vayamos por partes:

Supuesto: Todas las Hojas, donde se va a ejecutar la macro, deben estar estructuradas de la misma manera.

Parece que se ejecuta desde un Formulario ya que veo que hay Textbos, Listbox, etcc...

Pero tambien veo un bucle que ataca las celdas directamente (Cells(x + 1....)

Entonces lo unico que necesita la macro es saber con que hoja está trabajando. Pues pasemos le una variable con la hoja donde se va a ejecutar.

Crearia un Procedimiento Sub en un modulo independiente. Y copiaria todo lo que has puestoy cambiaria lo que te pongo

Sub TuNombreDeProcedimiento (TuHoja as Sheets)

'Todo

.........

With TuHoja

.Cells(x+1, ....

end with

Y lo Llamas desde el procedimeitno privado 'Al Hacer Click'

Private Sub CommandButton1_Click()

call TuNombreDeProcedimiento (ElNombreDeLaHojaApasar)

End Sub

Espero Te sirva en tu desarrollo

Saludos

 

Link to comment
Share on other sites

Hace 8 horas, ikanni dijo:

eugeniocol

 

Vayamos por partes:

Supuesto: Todas las Hojas, donde se va a ejecutar la macro, deben estar estructuradas de la misma manera.

Parece que se ejecuta desde un Formulario ya que veo que hay Textbos, Listbox, etcc...

Pero tambien veo un bucle que ataca las celdas directamente (Cells(x + 1....)

Entonces lo unico que necesita la macro es saber con que hoja está trabajando. Pues pasemos le una variable con la hoja donde se va a ejecutar.

Crearia un Procedimiento Sub en un modulo independiente. Y copiaria todo lo que has puestoy cambiaria lo que te pongo

Sub TuNombreDeProcedimiento (TuHoja as Sheets)

'Todo

.........

With TuHoja

.Cells(x+1, ....

end with

Y lo Llamas desde el procedimeitno privado 'Al Hacer Click'

Private Sub CommandButton1_Click()

call TuNombreDeProcedimiento (ElNombreDeLaHojaApasar)

End Sub

Espero Te sirva en tu desarrollo

Saludos

 

Voy a ver que saco de esto

Salud2....

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 30.00 EUR
      Objetivo: 130.00 EUR
  • Files

  • Download Statistics

    • Files
      144
    • Comments
      87
    • Reviews
      25

  • Crear macros Excel

  • Posts

    • Claro. Espero que te sirva, es algo no muy elaborado. Es un Activex que interactúa con una tabla oculta en la columna A donde están los datos que compartiste de ejemplo. El rango lo puedes editar en la propiedades del Activex en ListFillRange Saludines   Ejemplo - Lista despegable devuelve valores.xlsb
    • Mil gracias, Sergio Esto es otra cosa....jejeje Bueno, María, pues a ver si lo puedes probar y me dices.   Proyectos Estándares.zip
    • Debes tener una hoja con el nombre Resultado, si la quieres cambiar, modifica la línea resaltada en la macro. Colócate en la hoja donde tienes los datos a combinar antes de ejecutar la macro,  Sub Combinar() Application.ScreenUpdating = False '------------------------------------------------------------ With Sheets("Resultado") '<-- Nombre de la hoja del resultado '------------------------------------------------------------ columnas = Cells(1, 1).End(xlToRight).Column .Cells.Clear Cells(1, 1).Resize(1, columnas).Copy .Cells(1, 1) Cells(1, 1).Resize(1, columnas).Copy .Cells(1, columnas + 1) fila = 1 For Z = 2 To Range("A" & Rows.Count).End(xlUp).Row For x = Z + 1 To Range("A" & Rows.Count).End(xlUp).Row fila = fila + 1 Range("A" & Z).Resize(1, columnas).Copy .Cells(fila, 1) Range("A" & x).Resize(1, columnas).Copy .Cells(fila, columnas + 1) Next Next .Select End With Application.StatusBar = False End Sub  
    • @tese1969, por favor, prueba de nuevo. He hecho algunos ajustes.
    • Hola a todos de nuevo, ya he encontrado el fallo y lo he resuelto. Era un problema con los limites de manejo de datos  en el array inicial al ir pasando de un grupo a otro. Estaban mal definidos. Ahora ya funciona correctamente. Lo comento para que no dediquéis más tiempo a este tema. Ya esta resuelto y como decía en el mensaje anterior ahora el macro es 50 veces más rápido que el original. Por curiosidad lo he probado con una hoja con 5000 grupos (más de 200000 filas implicadas). Con el macro original le cuesta unas 4 horas de completar, con el nuevo unos 5 minutos. Para las simulaciones que quiero hacer es un cambio brutal. Os dejo el archivo por si alguien tiene curiosidad. Muchas gracias por vuestro tiempo y atención. PermutaDatosGrupos_D_arr_RESUELTO.zip
  • Recently Browsing

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

Privacy Policy