Más de Macros
Hola Cesar, cordial saludo,
De nuevo soy yo para molestarte por una ayudita con esta benditas macros.
Te cuento que en la macro que te anexo no me está funcionando en su totalidad por eso recurro a ti con dos preguntas al respecto, en donde comedidamente solicito tu colaboración.
1) Cuando se define un condicionante, él puede encontrar verdadero en la primera búsqueda y seguir la instrucción en caso de que así sea, pero si es falso, el condicionante debe dejar una instrucción para que continúe el condicionante explorando la siguiente instrucción. En este caso el condicionante quiere que cuando el valor de Celda sea "Cali" vaya a los libros relacionados dos columnas a la derecha y llame el archivo excel ahí relacionado y ejecute la operación de copiar los rangos "Ingresos" y "Costos" con destino al libro de "presupuesto 2003.xls"; pero si el valor de Celda no es Cali debe valorar si la celda es igual a "Medellín"y ejecutar la misma macro de copiar los libros que cumplan con esa condición. (En este caso tanto los libros origen de donde va a copiar la información, como el libro destino ya están abiertos).
Como podrás observar la macro que te mando anexa no tiene el código escrito así porque al dejar un segundo "if" dentro del primero me reporta un error que dice "Loop no puede ejecutarse sin un inicial de Do", y la verdad está relacionado "Do While y ... Loop"; por esa razón recurrí a correr por separado la Búsqueda de la primera ciudad y luego la búsqueda de la segunda, sin embargo el problema continúa.
2) Al correr esta macro me encuentro que el contador se enloquece y a pesar de tener la condición de parar cuando el contador sea igual a numero de clientes, no la ejecuta. Creo que es porque el condicionante "If"; toda vez que la macro obliga al desplazamiento de celda que esta parada en la columna de "ciudad" se desplace con la instrucción "(Activecell.value)" dos columna a la derecha para llamar al archivo cuando el "if" es verdadero.
Confiando en tu ayuda,
Atentamente
Ricardo bolaños
Anexo Macro en desarrollo
Sub Macro7_CONSOLIDA_PyG_POR_CIUDAD()
'
' Macro3 Macro
' Macro grabada el 06/04/2003 por Ricardo A. Bolaños
' Actualiza la Información consolidada por Negocio y por Ciudad
'
'
' Acceso directo: CTRL g
'
Windows("Presupuesto 2003.xls").Activate
Application.Goto Reference:="IngCiudad_1,CostCiudad_1,IngCiudad_2,CostCiudad_2"
Selection.ClearContents
Windows("MAINMENU II.xls").Activate
Application.Goto Reference:="HOME1"
Application.Goto Reference:="CIUDAD"
contador = 0
ActiveCell.Offset(0, 0).Select
Do While contador < range("NClientes").Value
ActiveCell.Offset(1, 0).Select
If (ActiveCell.Value) = "CALI" Then
ActiveCell.Offset(0, 2).Select
Windows(ActiveCell.Value).Activate
Application.Goto Reference:="Ingresos"
Selection.Copy
Windows("Presupuesto 2003.xls").Activate
Application.Goto Reference:=range("IngCiudad_1")
Selection.PasteSpecial Paste:=xlValues, Operation:=xlAdd, SkipBlanks:= _
False, Transpose:=False
Windows("MAINMENU II.xls").Activate
Windows(ActiveCell.Value).Activate
Application.Goto Reference:="Costos"
Selection.Copy
Windows("Presupuesto 2003.xls").Activate
Application.Goto Reference:=range("CostCiudad_1")
Selection.PasteSpecial Paste:=xlValues, Operation:=xlAdd, SkipBlanks:= _
False, Transpose:=False
Windows("MAINMENU II.xls").Activate
ActiveCell.Offset(0, -2).Select
End If
ActiveCell.Offset(contador + 1, 0).Select
Loop
Do While contador < range("NClientes").Value
ActiveCell.Offset(1, 0).Select
If (ActiveCell.Value) = "MEDELLIN" Then
ActiveCell.Offset(0, 2).Select
Windows(ActiveCell.Value).Activate
Application.Goto Reference:="Ingresos"
Selection.Copy
Windows("Presupuesto 2003.xls").Activate
Application.Goto Reference:=range("IngCiudad_2")
Selection.PasteSpecial Paste:=xlValues, Operation:=xlAdd, SkipBlanks:= _
False, Transpose:=False
Windows("MAINMENU II.xls").Activate
Windows(ActiveCell.Value).Activate
Application.Goto Reference:="Costos"
Selection.Copy
Windows("Presupuesto 2003.xls").Activate
Application.Goto Reference:=range("CostCiudad_2")
Selection.PasteSpecial Paste:=xlValues, Operation:=xlAdd, SkipBlanks:= _
False, Transpose:=False
Windows("MAINMENU II.xls").Activate
ActiveCell.Offset(0, -2).Select
End If
ActiveCell.Offset(contador + 1, 0).Select
Loop
Application.Goto Reference:="HOME1"
End Sub.
Tabla de busquda
CLIENTE CIUDAD RUTA "1" ARCHIVO
1 Alkosto CALI C:\Ricardo Documentos\Contratos\SLI S.A\Alkosto\ALK.XLS ALK.XLS
2 Andina de Herramientas CALI C:\Ricardo Documentos\Contratos\SLI S.A\Andina de Herramientas\AND.XLS AND.XLS
3 Angeos MEDELLÍN C:\Ricardo Documentos\Contratos\SLI S.A\Angeos\ANG.XLS ANG.XLS
De nuevo soy yo para molestarte por una ayudita con esta benditas macros.
Te cuento que en la macro que te anexo no me está funcionando en su totalidad por eso recurro a ti con dos preguntas al respecto, en donde comedidamente solicito tu colaboración.
1) Cuando se define un condicionante, él puede encontrar verdadero en la primera búsqueda y seguir la instrucción en caso de que así sea, pero si es falso, el condicionante debe dejar una instrucción para que continúe el condicionante explorando la siguiente instrucción. En este caso el condicionante quiere que cuando el valor de Celda sea "Cali" vaya a los libros relacionados dos columnas a la derecha y llame el archivo excel ahí relacionado y ejecute la operación de copiar los rangos "Ingresos" y "Costos" con destino al libro de "presupuesto 2003.xls"; pero si el valor de Celda no es Cali debe valorar si la celda es igual a "Medellín"y ejecutar la misma macro de copiar los libros que cumplan con esa condición. (En este caso tanto los libros origen de donde va a copiar la información, como el libro destino ya están abiertos).
Como podrás observar la macro que te mando anexa no tiene el código escrito así porque al dejar un segundo "if" dentro del primero me reporta un error que dice "Loop no puede ejecutarse sin un inicial de Do", y la verdad está relacionado "Do While y ... Loop"; por esa razón recurrí a correr por separado la Búsqueda de la primera ciudad y luego la búsqueda de la segunda, sin embargo el problema continúa.
2) Al correr esta macro me encuentro que el contador se enloquece y a pesar de tener la condición de parar cuando el contador sea igual a numero de clientes, no la ejecuta. Creo que es porque el condicionante "If"; toda vez que la macro obliga al desplazamiento de celda que esta parada en la columna de "ciudad" se desplace con la instrucción "(Activecell.value)" dos columna a la derecha para llamar al archivo cuando el "if" es verdadero.
Confiando en tu ayuda,
Atentamente
Ricardo bolaños
Anexo Macro en desarrollo
Sub Macro7_CONSOLIDA_PyG_POR_CIUDAD()
'
' Macro3 Macro
' Macro grabada el 06/04/2003 por Ricardo A. Bolaños
' Actualiza la Información consolidada por Negocio y por Ciudad
'
'
' Acceso directo: CTRL g
'
Windows("Presupuesto 2003.xls").Activate
Application.Goto Reference:="IngCiudad_1,CostCiudad_1,IngCiudad_2,CostCiudad_2"
Selection.ClearContents
Windows("MAINMENU II.xls").Activate
Application.Goto Reference:="HOME1"
Application.Goto Reference:="CIUDAD"
contador = 0
ActiveCell.Offset(0, 0).Select
Do While contador < range("NClientes").Value
ActiveCell.Offset(1, 0).Select
If (ActiveCell.Value) = "CALI" Then
ActiveCell.Offset(0, 2).Select
Windows(ActiveCell.Value).Activate
Application.Goto Reference:="Ingresos"
Selection.Copy
Windows("Presupuesto 2003.xls").Activate
Application.Goto Reference:=range("IngCiudad_1")
Selection.PasteSpecial Paste:=xlValues, Operation:=xlAdd, SkipBlanks:= _
False, Transpose:=False
Windows("MAINMENU II.xls").Activate
Windows(ActiveCell.Value).Activate
Application.Goto Reference:="Costos"
Selection.Copy
Windows("Presupuesto 2003.xls").Activate
Application.Goto Reference:=range("CostCiudad_1")
Selection.PasteSpecial Paste:=xlValues, Operation:=xlAdd, SkipBlanks:= _
False, Transpose:=False
Windows("MAINMENU II.xls").Activate
ActiveCell.Offset(0, -2).Select
End If
ActiveCell.Offset(contador + 1, 0).Select
Loop
Do While contador < range("NClientes").Value
ActiveCell.Offset(1, 0).Select
If (ActiveCell.Value) = "MEDELLIN" Then
ActiveCell.Offset(0, 2).Select
Windows(ActiveCell.Value).Activate
Application.Goto Reference:="Ingresos"
Selection.Copy
Windows("Presupuesto 2003.xls").Activate
Application.Goto Reference:=range("IngCiudad_2")
Selection.PasteSpecial Paste:=xlValues, Operation:=xlAdd, SkipBlanks:= _
False, Transpose:=False
Windows("MAINMENU II.xls").Activate
Windows(ActiveCell.Value).Activate
Application.Goto Reference:="Costos"
Selection.Copy
Windows("Presupuesto 2003.xls").Activate
Application.Goto Reference:=range("CostCiudad_2")
Selection.PasteSpecial Paste:=xlValues, Operation:=xlAdd, SkipBlanks:= _
False, Transpose:=False
Windows("MAINMENU II.xls").Activate
ActiveCell.Offset(0, -2).Select
End If
ActiveCell.Offset(contador + 1, 0).Select
Loop
Application.Goto Reference:="HOME1"
End Sub.
Tabla de busquda
CLIENTE CIUDAD RUTA "1" ARCHIVO
1 Alkosto CALI C:\Ricardo Documentos\Contratos\SLI S.A\Alkosto\ALK.XLS ALK.XLS
2 Andina de Herramientas CALI C:\Ricardo Documentos\Contratos\SLI S.A\Andina de Herramientas\AND.XLS AND.XLS
3 Angeos MEDELLÍN C:\Ricardo Documentos\Contratos\SLI S.A\Angeos\ANG.XLS ANG.XLS
1 Respuesta
Respuesta de César Mera
1