Execucion de Macros

05/06/2007 - 23:22 por Albino | Informe spam
Olá
Tengo una ignorancia para poner en el grupo.
Tengo un livro con varias hojas e algunas macros.
Las macros se usan en una determinad orden, pero acontece que por veces los
usorarios no respectan la orden de activacion de las mismas, lo que reulta
duplicacion de datos quando los mismos clican dos veces en la misma macro.
Como una de ellas hace aumentar la numeracion, resulta que los nº de pedidos
no sea correcto.
Lo que me convenia seria que las mismas macros solo se pudessen activar uma
vez, és decir solo seria possibile executar-la una segunda vez despues de
executar la otra.
Quando essa misma situacion se verificara, deveria de aparecer un aviso.
Muchas gracias
Albino.

Preguntas similare

Leer las respuestas

#1 Ivan
09/06/2007 - 02:05 | Informe spam
On 8 jun, 22:34, "Albino" wrote:
Olá Carlos.
No me salió nada, a ver se lo ice bien, pienso que no, és assi:
Tengo mis 2 Macros en un modulo "Module1" se lhaman, Sub Macro1() e Sub Macro2().
Entonces yo crie un "Modulo" nuevo "Mddule2" crie ai una macro como decias
________________
Sub Consolidado()
Sub Macro1()
Sub Macro2()
End Sub_______________
Después é puesto en el inicio de cada macro lo seguiente
______________________
Private Sub Macro1()
'el código de la macro
End Sub
y
_______________
Private Sub Macro2()
'el código de la macro
End Sub
Con un boton en la hoja2 atrbui la Macro "Sub Consolidado()" al dicho boton
Pero quando executava la macro de volvia el error [Compile error: Expectede End Sub]
Lo que ice mal? Bueno á lo mejor todo.
"Carlos" escreveu na mensagemnews:
Hola,

En ese caso lo que te conviene es crear una macro que su contenido sea el nombre de c/u de las macros actuales y deja en privado las existentes, por ejemplo;

Supongamos que tenemos 2 macros:

Sub busca_dato()
End Sub


Sub Agrega_dato()

End Sub

Entonces crea una macro del tipo

Sub Consolidado()

busca_dato()
agrag_dato()

End Sub

y coloca al principio de cada macro citada lo siguiente

Private Sub busca_dato()
End Sub


Private Sub Agrega_dato()

End Sub

Esperando que te sirva la ayuda, se despide

Carlos

"Albino" escribió en el mensajenews:
> Olá
> Tengo una ignorancia para poner en el grupo.
> Tengo un livro con varias hojas e algunas macros.
> Las macros se usan en una determinad orden, pero acontece que por veces los
> usorarios no respectan la orden de activacion de las mismas, lo que reulta
> duplicacion de datos quando los mismos clican dos veces en la misma macro.
> Como una de ellas hace aumentar la numeracion, resulta que los nº de pedidos
> no sea correcto.
> Lo que me convenia seria que las mismas macros solo se pudessen activar uma
> vez, és decir solo seria possibile executar-la una segunda vez despues de
> executar la otra.
> Quando essa misma situacion se verificara, deveria de aparecer un aviso.
> Muchas gracias
> Albino.
>
>



hola Albino,

si te he entendido bien, una cosa que podrias hacer es, en el modulo
donde tienes las dos macros, declarar una variable boolean a nivel de
modulo, y usarla mas o menos asi:

'en el area de declaraciones del modulo:

Dim NoEjecutar as Boolean

'en la 1ª macro:

Sub TuMacro_1()
If NoEjecutar Then Exit Sub

' aqui el codigo de la macro

NoEjecutar = True
End Sub

'en la 2ª macro

Sub TuMacro_2()
' la siguiente linea es por si no quieres que se ejecute esta macro
si no se ha ejecutado la 1ª. Si no es asi eliminala
If Not NoEjecutar then Exit Sub

' aqui tu codigo

NoEjecutar = False
End Sub

espero te ayude

un saludo
Ivan

PD: si las macros estan en modulos diferentes declara la variable como
Plublic
Respuesta Responder a este mensaje
#2 Ivan
09/06/2007 - 02:18 | Informe spam
On 8 jun, 22:34, "Albino" wrote:
Olá Carlos.
No me salió nada, a ver se lo ice bien, pienso que no, és assi:
Tengo mis 2 Macros en un modulo "Module1" se lhaman, Sub Macro1() e Sub Macro2().
Entonces yo crie un "Modulo" nuevo "Mddule2" crie ai una macro como decias
________________
Sub Consolidado()
Sub Macro1()
Sub Macro2()
End Sub_______________
Después é puesto en el inicio de cada macro lo seguiente
______________________
Private Sub Macro1()
'el código de la macro
End Sub
y
_______________
Private Sub Macro2()
'el código de la macro
End Sub
Con un boton en la hoja2 atrbui la Macro "Sub Consolidado()" al dicho boton
Pero quando executava la macro de volvia el error [Compile error: Expectede End Sub]
Lo que ice mal? Bueno á lo mejor todo.
"Carlos" escreveu na mensagemnews:
Hola,

En ese caso lo que te conviene es crear una macro que su contenido sea el nombre de c/u de las macros actuales y deja en privado las existentes, por ejemplo;

Supongamos que tenemos 2 macros:

Sub busca_dato()
End Sub


Sub Agrega_dato()

End Sub

Entonces crea una macro del tipo

Sub Consolidado()

busca_dato()
agrag_dato()

End Sub

y coloca al principio de cada macro citada lo siguiente

Private Sub busca_dato()
End Sub


Private Sub Agrega_dato()

End Sub

Esperando que te sirva la ayuda, se despide

Carlos

"Albino" escribió en el mensajenews:
> Olá
> Tengo una ignorancia para poner en el grupo.
> Tengo un livro con varias hojas e algunas macros.
> Las macros se usan en una determinad orden, pero acontece que por veces los
> usorarios no respectan la orden de activacion de las mismas, lo que reulta
> duplicacion de datos quando los mismos clican dos veces en la misma macro.
> Como una de ellas hace aumentar la numeracion, resulta que los nº de pedidos
> no sea correcto.
> Lo que me convenia seria que las mismas macros solo se pudessen activar uma
> vez, és decir solo seria possibile executar-la una segunda vez despues de
> executar la otra.
> Quando essa misma situacion se verificara, deveria de aparecer un aviso.
> Muchas gracias
> Albino.
>
>



hola de nuevo, Albino

creo que me he liado. Si las macros se llaman desde la hoja, creo que
la variable no conservara su valor entre llamada y llamada.

si es asi, otra cosa que podrias hacer es lo mismo pero con una celda
de una hoja oculta, pej. podria ser asi (casi igual, pero.)

'en el evento Open del libro (del modulo ThisWorkbook) pones la celda
a False

Private Sub Workbook_Open()
Worksheets("Oculta").[a1] = False
End Sub

'en el modulo de tus macros

'en la 1ª macro:


Sub TuMacro_1()
If Worksheets("Oculta").[a1] = true then exit sub


' aqui el codigo de la macro


Worksheets("Oculta").[a1] = true
End Sub


'en la 2ª macro


Sub TuMacro_2()
' la siguiente linea es por si no quieres que se ejecute esta macro
si no se ha ejecutado la 1ª. Si no es asi eliminala
If Worksheets("Oculta").[a1] = False then exit sub


' aqui tu codigo


Worksheets("Oculta").[a1] = False
End Sub


espero te ayude


un saludo
Ivan
Respuesta Responder a este mensaje
#3 Ivan
09/06/2007 - 14:10 | Informe spam
On 9 jun, 02:18, Ivan wrote:
On 8 jun, 22:34, "Albino" wrote:





> Olá Carlos.
> No me salió nada, a ver se lo ice bien, pienso que no, és assi:
> Tengo mis 2 Macros en un modulo "Module1" se lhaman, Sub Macro1() e Sub Macro2().
> Entonces yo crie un "Modulo" nuevo "Mddule2" crie ai una macro como decias
> ________________
> Sub Consolidado()
> Sub Macro1()
> Sub Macro2()
> End Sub_______________
> Después é puesto en el inicio de cada macro lo seguiente
> ______________________
> Private Sub Macro1()
> 'el código de la macro
> End Sub
> y
> _______________
> Private Sub Macro2()
> 'el código de la macro
> End Sub
> Con un boton en la hoja2 atrbui la Macro "Sub Consolidado()" al dicho boton
> Pero quando executava la macro de volvia el error [Compile error: Expectede End Sub]
> Lo que ice mal? Bueno á lo mejor todo.
> "Carlos" escreveu na mensagemnews:
> Hola,

> En ese caso lo que te conviene es crear una macro que su contenido sea el nombre de c/u de las macros actuales y deja en privado las existentes, por ejemplo;

> Supongamos que tenemos 2 macros:

> Sub busca_dato()
> End Sub
>

> Sub Agrega_dato()

> End Sub

> Entonces crea una macro del tipo

> Sub Consolidado()

> busca_dato()
> agrag_dato()

> End Sub

> y coloca al principio de cada macro citada lo siguiente

> Private Sub busca_dato()
> End Sub
>

> Private Sub Agrega_dato()

> End Sub

> Esperando que te sirva la ayuda, se despide

> Carlos

> "Albino" escribió en el mensajenews:
> > Olá
> > Tengo una ignorancia para poner en el grupo.
> > Tengo un livro con varias hojas e algunas macros.
> > Las macros se usan en una determinad orden, pero acontece que por veces los
> > usorarios no respectan la orden de activacion de las mismas, lo que reulta
> > duplicacion de datos quando los mismos clican dos veces en la misma macro.
> > Como una de ellas hace aumentar la numeracion, resulta que los nº de pedidos
> > no sea correcto.
> > Lo que me convenia seria que las mismas macros solo se pudessen activar uma
> > vez, és decir solo seria possibile executar-la una segunda vez despues de
> > executar la otra.
> > Quando essa misma situacion se verificara, deveria de aparecer un aviso.
> > Muchas gracias
> > Albino.

hola de nuevo, Albino

creo que me he liado. Si las macros se llaman desde la hoja, creo que
la variable no conservara su valor entre llamada y llamada.

si es asi, otra cosa que podrias hacer es lo mismo pero con una celda
de una hoja oculta, pej. podria ser asi (casi igual, pero.)

'en el evento Open del libro (del modulo ThisWorkbook) pones la celda
a False

Private Sub Workbook_Open()
Worksheets("Oculta").[a1] = False
End Sub

'en el modulo de tus macros

'en la 1ª macro:

Sub TuMacro_1()
If Worksheets("Oculta").[a1] = true then exit sub

' aqui el codigo de la macro

Worksheets("Oculta").[a1] = true
End Sub

'en la 2ª macro

Sub TuMacro_2()
' la siguiente linea es por si no quieres que se ejecute esta macro
si no se ha ejecutado la 1ª. Si no es asi eliminala
If Worksheets("Oculta").[a1] = False then exit sub

' aqui tu codigo

Worksheets("Oculta").[a1] = False
End Sub

espero te ayude

un saludo
Ivan- Ocultar texto de la cita -

- Mostrar texto de la cita -



hola de nuevo,

y como no hay dos sin tres, me vuelvo a desdecir.

tras probarlo, la 1ª opcion si es valida. Si conserva su valor (la
variable) entre llamada y llamada

no se porque pero estaba convencido de que en este caso no seria asi

disculpa el error y de esta forma parece ir muy bien

un saludo
Ivan
Respuesta Responder a este mensaje
#4 Albino
13/06/2007 - 00:41 | Informe spam
Ivan:
Muchas gracias ya está a funcionar.
Mismo despues de cerrar el livro lá memoria se mantiene no dejando ejecutar
la macro que fue ejecutada anteriormente
Muchas gracias un saludo
Albino

'en el area de declaraciones del modulo:

Dim NoEjecutar as Boolean

'en la 1ª macro:

Sub TuMacro_1()
If NoEjecutar Then Exit Sub

' aqui el codigo de la macro

NoEjecutar = True
End Sub

'en la 2ª macro

Sub TuMacro_2()
' la siguiente linea es por si no quieres que se ejecute esta macro
si no se ha ejecutado la 1ª. Si no es asi eliminala
If Not NoEjecutar then Exit Sub

' aqui tu codigo

NoEjecutar = False
End Sub

espero te ayude

un saludo
Ivan
Respuesta Responder a este mensaje
#5 Ivan
13/06/2007 - 02:20 | Informe spam
hola Albino,

me alegro que ya este funcionando, pero permiteme que te comente una
cosa, por si en un futuro te hiciese falta

es sobre esto:

Mismo despues de cerrar el livro lá memoria se mantiene no dejando ejecutar
la macro que fue ejecutada anteriormente



me temo que no es asi (y si estoy equivocado y alguien mas esta
leyendo esto, le agradeceria nos lo comentara). Si no me equivoco, las
variables no conservan su valor por si mismas al cerrar una aplicacion
de VBa, aunque hay formas de guardar su valor y recuperlo al abrirla.

de nuevo si no me equivoco, el motivo de que te vuelva a funcionar la
variable, es por que cuando declaras una variable, si no la
inicializas especificamente en algun momento previo, estas toman el
valor que tienen asignado por defecto, que en el caso de las boolean
es False.

por este motivo, cuando vuelves a abrir el libro la variable
NoEjecutar tendra el valor False hasta que no se haya ejecutado la
Macro_1 y la pongas a True al final del mismo (da igual la macro que
se haya ejecutado la ultima en el ultimo acceso al libro)

si desearas usar el ultimo valor asignado a la variable antes del
ultimo cierre del libro, podrias usar el truco de poner el valor en
una celda y recuperarlo al abrir el libro. O echale un vistazo a
SaveSetting y similares en la ayuda, que creo tambien te podrian valer

bueno, lo dicho, solo es para evitarte posibles errores en un futuro,

espero no haberte hecho un lio y que me entiendas algo

un saludo
Ivan
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida