Jerarquización de las macros
Resuelto
padbollevrai
Mensajes publicados
58
Estado
Miembro
-
padbollevrai Mensajes publicados 58 Estado Miembro -
padbollevrai Mensajes publicados 58 Estado Miembro -
Hola,
Esto es lo que debo lograr.
Tengo un programa que recupera los valores de una hoja, los procesa y los transfiere a una columna de otra hoja.
Es muy bien, pero ¡tengo que completar 12 columnas de este modo!
Básicamente, son 6 columnas visualizadas en 2 (valor mínimo y valor Máximo).
PERO las columnas Min también pueden ser de tipo "Count", o de tipo "Time", en cuyo caso no hay columnas Máx junto a ellas.
Para resumir: Las columnas A, C, E, G, I, K pueden ser Min, Count o Time,
las columnas B, D, F, G, J, L pueden ser Max o Nada.
Mi programación debe adaptarse a cada tipo de columna, por eso pensé en una macro maestra que comandaría macros esclavas según el nombre de cada columna, de la forma (ojo, es solo un borrador):
Eso funcionaría, pero sería un verdadero lío! En efecto, 24 programas diferentes cuando solo hay tres tareas a realizar...
Lo que me gustaría es tener un programa para rellenar los Count, uno para los Min, uno para los Max y otro para los Time, comandados por la macro maestra, y que se adaptarían para escribir la información en las columnas correctas, por supuesto.
¿Es posible, y cómo se hace?
¡Gracias!
Configuración: Windows Vista / Chrome 34.0.1847.131
Esto es lo que debo lograr.
Tengo un programa que recupera los valores de una hoja, los procesa y los transfiere a una columna de otra hoja.
Es muy bien, pero ¡tengo que completar 12 columnas de este modo!
Básicamente, son 6 columnas visualizadas en 2 (valor mínimo y valor Máximo).
PERO las columnas Min también pueden ser de tipo "Count", o de tipo "Time", en cuyo caso no hay columnas Máx junto a ellas.
Para resumir: Las columnas A, C, E, G, I, K pueden ser Min, Count o Time,
las columnas B, D, F, G, J, L pueden ser Max o Nada.
Mi programación debe adaptarse a cada tipo de columna, por eso pensé en una macro maestra que comandaría macros esclavas según el nombre de cada columna, de la forma (ojo, es solo un borrador):
Sub MAIN_FILLING()
If A3 es "Count", entonces llamar Filling_Count_A, Sino If A3 es "Time", entonces S llamar Filling_Time_A, Sino Llamar Filling_Min_A
If B3 es "Max", entonces llamar Filling_Max_B, Sino ""
If C3 es "Count", entonces llamar Filling_Count_C, Sino si C3 es "Time", entonces Llamar Filling_Time_C, Sino Llamar Filling_Min_C
If D3 es "Max", entonces llamar Filling_Max_D, Sino ""
If E3 es "Count", entonces llamar Filling_Count_E, Sino si E3 es "Time", entonces Llamar Filling_Time_E, Sino Llamar Filling_Min_E
If F3 es "Max", entonces llamar Filling_Max_F, Sino ""
If G3 es "Count", entonces llamar Filling_Count_G, Sino si G3 es "Time", entonces Llamar Filling_Time_G, Sino Llamar Filling_Min_G
If H3 es "Max", entonces llamar Filling_Max_H, Sino ""
If I3 es "Count", entonces llamar Filling_Count_I, Sino si I3 es "Time", entonces Llamar Filling_Time_I, Sino Llamar Filling_Min_I
If J3 es "Max", entonces llamar Filling_Max_J, Sino ""
If K3 es "Count", entonces llamar Filling_Count_K, Sino si K3 es "Time", entonces Llamar Filling_Time_K, Sino Llamar Filling_Min_K
If L3 es "Max", entonces llamar Filling_Max_L, Sino ""
End Sub
Eso funcionaría, pero sería un verdadero lío! En efecto, 24 programas diferentes cuando solo hay tres tareas a realizar...
Lo que me gustaría es tener un programa para rellenar los Count, uno para los Min, uno para los Max y otro para los Time, comandados por la macro maestra, y que se adaptarían para escribir la información en las columnas correctas, por supuesto.
¿Es posible, y cómo se hace?
¡Gracias!
Configuración: Windows Vista / Chrome 34.0.1847.131
4 respuestas
-
Bonjour,
So you need a function (or a procedure) with the column as a parameter. Like this:
Sub Main() If [A3] = "count" Then Call Filling_Count(1) If [A3] = "time" Then Call Filling_Time(1) If [B3] = "count" Then Call Filling_Count(2) If [B3] = "time" Then Call Filling_Time(2) 'etc... End Sub Sub Filling_Count(NumCol As Integer) With columns(NumCol) 'blabla End With End Sub Sub Filling_Time(NumCol As Integer) With columns(NumCol) 'blabla End With End Sub
You can even make a loop in your main with a select case etc...
Example:For Col = 1 To 12 Select Case Cells(3, Col) Case "count" Call Filling_Count(Col) Case "min" Call Filling_Min(Col) Case "max" Call Filling_Max(Col) Case "Time" Call Filling_Time(Col) Case Else MsgBox "Erreur Fatale" End Select Next
--
Cordialement,
Franck -
¡Vaya! ¡Excelente, muchas gracias!
Ahora, en mis sub-macros, ¿cómo reemplazar la letra de la columna por la variable "Col"?
Ejemplo, si tengo Range("B" & K).Value, ¿basta con poner Range("Col" & K)?
Gracias -
Muchas gracias.
Última cosa: has puesto
For Col = 1 To 12 Select Case Cells(3, Col) Case "count" Call Filling_Count(Col) Case "min" Call Filling_Min(Col) Case "max" Call Filling_Max(Col) Case "Time" Call Filling_Time(Col) Case Else MsgBox "Erreur Fatale" End Select Next
O, en lugar de "Erreur fatale" en caso de "case else", me gustaría que pase al siguiente valor. Así que puse un Next en lugar de MsgBox "Erreur Fatale", pero eso genera un doble Next... Y me da un error de compilación.
¿Basta con no poner nada o hay algo particular?
Otro problema: en una de mis subrutinas, un error de compilación señala "Déclaration existante dans la portée en cours" sobre "Dim Col as Integer".
Solo la declaro una vez esa variable; no entiendo ese error, especialmente porque las otras subrutinas situadas más arriba en el código no han mostrado ese error.
Merci -
Logré salir adelante, ¡todo está bien!
En realidad estaba poniendo "Dim Col as Integer" tanto en el Main como en cada macro.
¡Muchas gracias!