Macros con condiciones para los case
Dante, te mando las condiciones para los case
Todas las cuentas las tengo ordenadas por la columna "A" y las cuentas se encuentran agrupadas por numero de cuenta
En mi hoja "base" actual de mi libro Base de datos 2015 tengo estas cuentas
CASE 1244(columna de cuenta):
- Columna "A"debe de ser igual a (Letra A)
- Columna "B" debe de ser igual a ('00005)
- Columna "D" debe de ser igual a "cero" o "vacio"
- Por lo cual si existen 10 cuentas deberá copiarlas (columna "C") y pegarlas en el archivo Activos.xlsm en la hoja "cuenta " Celda "A2"
- Ejecutar macro Run "ACTIVOS.xlsm!validacion_pasivos"
case 2258(esta columna es la cuenta):
- Columna "A"debe de ser igual a (Letra C)
- Columna "B" debe de ser igual a ('00005)
- Columna "D" debe de ser igual a "cero" o "vacio"
- Por lo cual si existen 10 cuentas deberá copiarlas (columna "D") y pegarlas en el archivo Activos.xlsm en la hoja "cuenta " Celda "A2"
- Ejecutar macro Run "ACTIVOS.xlsm!validacion_pasivos"
1 respuesta
No veo la diferencia entre 1244 y 2258, ambas se copian en la hoja "cuenta", en la celda A2 y ejecutas la macro "validacion_pasivos", ¿es correcto? para eso no necesitas un case.
Perdón Dante te corrijo el case, eh modificado y agregado lo correcto, es que solo se copio sin modificar el case
CASE 1244(columna de cuenta):
- Columna "A"debe de ser igual a (Letra A)
- Columna "B" debe de ser igual a ('00005)
- Columna "D" debe de ser igual a "cero" o "vacio"
- Por lo cual si existen 10 cuentas deberá copiarlas (columna "C") y pegarlas en el archivo Activos.xlsm en la hoja "cuenta " Celda "A2"
- Ejecutar macro Run "ACTIVOS.xlsm!validacion_pasivos"
case 2258(esta columna es la cuenta):
- Columna "A"debe de ser igual a (Letra A)
- Columna "B" debe de ser igual a ('00100)
- Columna "D" debe tener una referencia diferente de "cero"
- Por lo cual si existen 10 cuentas deberá copiarlas (columna "D") y pegarlas en el archivo Activos.xlsm en la hoja "cuenta " Celda "A2"
- Ejecutar macro Run "ACTIVOS.xlsm!validacion_Activos"
case 1233 (esta columna es la cuenta):
- Columna "A"debe de ser igual a (Letra C)
- Columna "B" debe de ser igual a ('00100)
- Columna "D" debe tener una referencia diferente de "cero"
- Por lo cual si existen 10 cuentas deberá copiarlas (columna "D") y pegarlas en el archivo Activos.xlsm en la hoja "cuenta " Celda "A2"
- Ejecutar macro Run "ACTIVOS.xlsm!validacion_Activos"
1. Ya no entendí, ¿en cuál columna están las cuentas? en la C o en la D?
2. Las cuentas están ordenadas, es decir, primero están todas las 1233, ¿luego las 1244 y por último las 2258?
3. Nuevamente veo que la 2258 y 1233 tienen la misma condición, ¿si se va a realizar lo mismo no tiene caso ponerlos en diferente case?
Si se te complican los ejemplos, no trates de hacer el código, simplemente pon una imagen y con colores y comentarios me explicas qué quieres pasar y en otra imagen me pones en dónde lo quieres pegar. Así para cada caso de cuenta.
1.- En la columna D
2.- No las cuentas están ordenadas por la columna A, primero (Letra A) y luego (Letra C)
3.- La diferencia entre estas dos cuentas es el punto 1 y evidentemente el numero de cuenta.
Por favor
Pero se van a copiar de todas formas todas las cuentas a la celda A2 sin importar la letra y se va a ejecutar la misma macro "validacion_Activos"
Por eso te pido tus imágenes.
Tienes esto:
"Columna "D" debe tener una referencia diferente de "cero""
"Columna "D" debe de ser igual a "cero" o "vacio""
¿Entonces en la "D" tienes referencias o cuentas?
Disculpa que no entienda, pero ahora está menos clara la explicación
Dante ya te entendí. Pero no me explique lo que pasa es que para el primer case se copiara la cuenta. Y para los otros dos se va a copiar la referencia
Y siempre se deben pegar a partir de la celda A2. ¿Entonces hay que limpiar primero lo que haya en la celda A2 hacia abajo y luego pegar lo nuevo?
Te anexo la macro
Sub EjecutarMacros() 'Por.Dante Amor Application.ScreenUpdating = False Application.DisplayAlerts = False Set l1 = ThisWorkbook Set h1 = l1.ActiveSheet ' ChDir l1.Path & "\" On Error Resume Next Set l2 = Workbooks.Open("ACTIVOS.xlsm") On Error GoTo 0 Set h2 = l2.Sheets("cuenta") ' tipos = Array("A", "A", "C") texto = Array("00005", "00100", "00100") conta = Array(1244, 2258, 1233) macro = Array("validacion_pasivos", "validacion_activos", "validacion_activos") colum = Array("C", "D", "D") refer = Array(1, 2, 2) ' l1.Activate If h1.AutoFilterMode Then h1.AutoFilterMode = False u = h1.Range("A" & Rows.Count).End(xlUp).Row For i = LBound(conta) To UBound(conta) h1.Range("A1:D" & u).AutoFilter Field:=1, Criteria1:=tipos(i) h1.Range("A1:D" & u).AutoFilter Field:=2, Criteria1:=texto(i) h1.Range("A1:D" & u).AutoFilter Field:=3, Criteria1:=conta(i) If refer(i) = 1 Then h1.Range("A1:D" & u).AutoFilter Field:=4, Criteria1:="=0", _ Operator:=xlOr, Criteria2:="=" Else h1.Range("A1:D" & u).AutoFilter Field:=4, Criteria1:="<>0", _ Operator:=xlAnd, Criteria2:="<>" End If u1 = h1.Range("A" & Rows.Count).End(xlUp).Row If u1 > 1 Then u2 = h2.Range("A" & Rows.Count).End(xlUp).Row If u2 < 2 Then u2 = 2 h2.Range("A2:A" & u2).ClearContents h1.Range(colum(i) & "2:" & colum(i) & u1).Copy h2.[A2] Run "ACTIVOS.xlsm!" & macro(i) End If Next l2.Close True If h1.AutoFilterMode Then h1.AutoFilterMode = False MsgBox "Proceso terminado", vbInformation End Sub
S a l u d o s . D a n t e A m o r
Recuerda valorar la respuesta.
Amigo muy buenos días, perdón que te moleste, y tan temprano pero esta macro corre pero no ejecuta mis macros, de hecho solo dice proceso terminado pero no entra en ningún ciclo. me puedes auxiliar por favor
Ok dante gracias por tu respuesta, pero me aparece el código en amarillo en esta parte
u2 = h2.Range("A" & Rows.Count).End(xlUp).Row
¿Y qué mensaje de error te aparece en pantalla?
Si modificaste algo en la macro, escribe cómo dejaste la macro.
Gracias Dante por tu atención, lo que esta en negritas me lo marca en amarillo
Sub EjecutarMacros()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set l1 = ThisWorkbook
Set h1 = l1.ActiveSheet
'
ChDir l1.Path & "\"
On Error Resume Next
Set l2 = Workbooks.Open("Saldos HA26.xls")
On Error GoTo 0
Set h2 = l2.Sheets("DATOS")
ruta = l2.Path & "\"
lib2 = ruta & "MP55_1.xls"
Set l1 = Workbooks.Open(lib2)
Set h1 = l1.Sheets("DATOS")
'
tipos = Array("C", "C", "A")
texto = Array("00897", "00100", "00101")
conta = Array("15053102023192", "15053100003168", "23113100003173")
macro = Array("Obtiene_saldos_en_HA26_por_referencia", "validacion_activos", "validacion_Pasivos")
colum = Array("I", "G", "G")
refer = Array(1, 2, 2)
'
l1.Activate
If h1.AutoFilterMode Then h1.AutoFilterMode = False
u = h1.Range("A" & Rows.Count).End(xlUp).Row
For i = LBound(conta) To UBound(conta)
h1.Range("A1:I" & u).AutoFilter Field:=1, Criteria1:=tipos(i)
h1.Range("A1:I" & u).AutoFilter Field:=7, Criteria1:=texto(i)
h1.Range("A1:I" & u).AutoFilter Field:=8, Criteria1:=conta(i)
If refer(i) = 1 Then
h1.Range("A1:I" & u).AutoFilter Field:=9, Criteria1:="=0", _
Operator:=xlOr, Criteria2:="="
Else
h1.Range("A1:I" & u).AutoFilter Field:=9, Criteria1:="<>0", _
Operator:=xlAnd, Criteria2:="<>"
End If
u1 = h1.Range("A" & Rows.Count).End(xlUp).Row
If u1 > 1 Then
u2 = h2.Range("A" & Rows.Count).End(xlUp).Row
If u2 < 2 Then u2 = 2
h2.Range("A2:A" & u2).ClearContents
h1.Range(colum(i) & "2:" & colum(i) & u1).Copy h2.[A2]
Run "Saldos HA26.xls!" & macro(i)
End If
Next
l2.Close True
If h1.AutoFilterMode Then h1.AutoFilterMode = False
MsgBox "Proceso terminado", vbInformation
End Sub
¿Cuándo lo ejecutas te envía un mensaje de error?
¿Qué mensaje de error te aparece?
Si modificaste la macro, ¿dime qué le cambiaste?
Cambie solo las columnas de las cuentas, el nombre de mi archivo. el rango de a hasta I. Y AutoFilter Field:=9
Estás intentando abrir este libro:
"Saldos HA26.xls"
Pero no existe ese archivo, revisa bien el nombre y la extensión.
Quita esta línea de la macro
On Error Resume Next
Actualiza el nombre del libro y ejecuta nuevamente la macro
LISTO YA SE EJECUTO pero no me corre nada de las macros, de hecho solo hace el filtro. pero no entra en ningún ciclo
No sé a que te refieres con "no entra en ningún ciclo"
La macro funcionaba bien!, pero modificaste la macro.
La macro tenía esto:
tipos = Array("A", "A", "C") texto = Array("00005", "00100", "00100") conta = Array(1244, 2258, 1233) macro = Array("validacion_pasivos", "validacion_activos", "validacion_activos") colum = Array("C", "D", "D") refer = Array(1, 2, 2)
Y ahora pusiste esto:
tipos = Array("C", "C", "A") texto = Array("00897", "00100", "00101") conta = Array("15053102023192", "15053100003168", "23113100003173") macro = Array("Obtiene_saldos_en_HA26_por_referencia", "validacion_activos", "validacion_Pasivos") colum = Array("I", "G", "G") Refer = Array(1, 2, 2)
Entonces no entiendo dónde están los cuentas y qué textos vas a buscar,
Antes las cuentas eran números, ahora tienes textos.
Si modificas la macro INcorrectamente, no te va a filtrar los datos y entonces no va a copiar nada.
La macro te la entregué funcionando con los datos que solicitaste, pero si cambias los datos de columna o el tipo, tengo que realizar ajustes en la macro y volver a probar.
Ponerme a revisar todos los cambios que le hiciste a la macro, también me lleva tiempo, mejor crea una nueva pregunta y me específicas claramente en dónde están los datos y me pones ejemplos reales, porque en tus ejemplos anteriores tenías cuenta como 1244 y ahora tienes esto "15053102023192" y no es lo mismo buscar 1244 que "15053102023192", entonces tengo que probar con datos reales y entregarte la macro funcionando para lo que pides.
- Compartir respuesta