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:
Mostrar la cita
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
#2 Ivan
09/06/2007 - 02:18 | Informe spam
On 8 jun, 22:34, "Albino" wrote:
Mostrar la cita
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
#3 Ivan
09/06/2007 - 14:10 | Informe spam
On 9 jun, 02:18, Ivan wrote:
Mostrar 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
#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
#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:

Mostrar la cita
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
Ads by Google
Search Busqueda sugerida