ejecutar macro en función de valor de celda

03/02/2004 - 13:28 por Osejol | Informe spam
Hola a todos.

Tengo el siguiente código que ejecuto desde la hoja "PRINCIPAL" pulsando
Ctrl+a. Esto lo tengo que hacer repetitivamente determinado número de veces
(variable).

Sub auxiliar()
Application.ScreenUpdating = False
Sheets("AUXILIAR").Select
Range("C3:C3").Select
Selection.Copy
Range("A65536").Select
Selection.End(xlUp).Select
ActiveCell.Offset(2, 0).Range("A1").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone,
SkipBlanks:=False, Transpose:=False
Sheets("PRINCIPAL").Select
End Sub

Lo que me gustaría es que una vez que pulse Ctrl+a el código se ejecute
automáticamente mientras el valor de una celda sea mayor que 0 (cero), por
ejemplo la celda J10, y así no tener que pulsar Ctrl+a nada más que una vez.

La verdad es que he probado varias cosas pero no he conseguido que funcione.

Si alguien puede ayudarme le estaré muy agradecido.


Saludos

Osejol

Preguntas similare

Leer las respuestas

#1 Ignacio Pérez
03/02/2004 - 17:57 | Informe spam
Hola:
No se puede hacer lo que pretendes, me explico, si quieres cambiar el valor
de una celda mientras se ejecuta una macro debes de hacerlo con una
instrucción dentro de la propia macro o que la celda contenga una formula
que varíe en relación a alguna de las que la macro modifica, porque la
ejecución de la macro te va a impedir el acceso manual a cualquier celda o
rango. ¿existe la posibilidad de saber el numero de veces que se tiene que
ejecutar el bucle?

De todas formas te he modificado ligeramente la macro y te pongo el código
pero ten en cuenta que al ejecutarla vas a entrar en un bucle sin
fin.

Sub auxiliar()
Do
Sheets("AUXILIAR").Range("C3").Copy
Sheets("AUXILIAR").Range("A65536").End(xlUp).Offset(2,
0).Range("A1").PasteSpecial _
Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Loop While Range("D1").Value = 0
End Sub

Si tienes dudas por aquí estaré
Un saludo

"Osejol" escribió en el mensaje
news:bvo44r$2rf$
Hola a todos.

Tengo el siguiente código que ejecuto desde la hoja "PRINCIPAL" pulsando
Ctrl+a. Esto lo tengo que hacer repetitivamente determinado número de


veces
(variable).

Sub auxiliar()
Application.ScreenUpdating = False
Sheets("AUXILIAR").Select
Range("C3:C3").Select
Selection.Copy
Range("A65536").Select
Selection.End(xlUp).Select
ActiveCell.Offset(2, 0).Range("A1").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone,
SkipBlanks:=False, Transpose:=False
Sheets("PRINCIPAL").Select
End Sub

Lo que me gustaría es que una vez que pulse Ctrl+a el código se ejecute
automáticamente mientras el valor de una celda sea mayor que 0 (cero), por
ejemplo la celda J10, y así no tener que pulsar Ctrl+a nada más que una


vez.

La verdad es que he probado varias cosas pero no he conseguido que


funcione.

Si alguien puede ayudarme le estaré muy agradecido.


Saludos

Osejol


Respuesta Responder a este mensaje
#2 Osejol
03/02/2004 - 18:52 | Informe spam
No se puede hacer lo que pretendes, me explico, si quieres cambiar el


valor
de una celda mientras se ejecuta una macro debes de hacerlo con una
instrucción dentro de la propia macro o que la celda contenga una formula
que varíe en relación a alguna de las que la macro modifica, porque la
ejecución de la macro te va a impedir el acceso manual a cualquier celda o
rango. ¿existe la posibilidad de saber el numero de veces que se tiene


que
ejecutar el bucle?




- Hola Ignacio, gracias por contestar.

- No debería haber problema en eso, en la hoja hay una celda que actúa como
contador descendente hasta 0 (cero).

- Sin embargo, no funciona.

- He sustituído Ctrl+a por un botón pero cuando lo pulso se detiene la
ejecución de la macro mientras en la barra inferior muestra el siguient
mensaje: "Seleccione el destino y pulse ENTRAR o elija Pegar"

- Te pongo a continuación cómo he dejado el código:

Sub auxiliar()
Do
Application.ScreenUpdating = False
Sheets("AUXILIAR").Select
Range("C3:C3").Select
Selection.Copy
Range("A65536").Select
Selection.End(xlUp).Select
ActiveCell.Offset(1, 0).Range("A2").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone,
SkipBlanks:=False, Transpose:=False
Sheets("PRINCIPAL").Select
Loop While Range("E18").Value > 0
End Sub

Gracias

Osejol
Respuesta Responder a este mensaje
#3 Osejol
04/02/2004 - 12:13 | Informe spam
Hola de nuevo, al final he dejado el código así:

Sub auxiliar()
Do
Application.ScreenUpdating = False
Sheets("AUXILIAR").Select
Range("C3").Select
Selection.Copy
Range("A65536").Select
Selection.End(xlUp).Select
ActiveCell.Offset(1, 0).Range("A2").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone,
SkipBlanks:=False, Transpose:=False
Sheets("PRINCIPAL").Select
Loop While Range("B1").Value > 0
End Sub

y parece que funciona

sin embargo, algo que hasta ahora funcionaba bien ha dejado de hacerlo y
bloquea el fichero, lo siguiente:

Sub filtro()
Sheets("AUXILIAR").Select
Cells.Select
Rows("2:2").Select
Selection.AutoFilter
Selection.AutoFilter Field:=1, Criteria1:="<>"
End Sub

Lo uso para seleccionar las filas donde haya contenido.


Gracias por la ayuda

Osejol
Respuesta Responder a este mensaje
#4 Ignacio Pérez
04/02/2004 - 20:48 | Informe spam
Hola Osejol:
Si la primera fila contiene los rótulos con esto te tiene que funcionar:
Ceñís.AutoFilter Field:=1, Criteria1:="<>"
Si no es asi me lo comentas...

Un saludo

"Osejol" escribió en el mensaje
news:bvqk4t$q7a$
Hola de nuevo, al final he dejado el código así:

Sub auxiliar()
Do
Application.ScreenUpdating = False
Sheets("AUXILIAR").Select
Range("C3").Select
Selection.Copy
Range("A65536").Select
Selection.End(xlUp).Select
ActiveCell.Offset(1, 0).Range("A2").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone,
SkipBlanks:=False, Transpose:=False
Sheets("PRINCIPAL").Select
Loop While Range("B1").Value > 0
End Sub

y parece que funciona

sin embargo, algo que hasta ahora funcionaba bien ha dejado de hacerlo y
bloquea el fichero, lo siguiente:

Sub filtro()
Sheets("AUXILIAR").Select
Cells.Select
Rows("2:2").Select
Selection.AutoFilter
Selection.AutoFilter Field:=1, Criteria1:="<>"
End Sub

Lo uso para seleccionar las filas donde haya contenido.


Gracias por la ayuda

Osejol


Respuesta Responder a este mensaje
#5 Ignacio Pérez
04/02/2004 - 21:24 | Informe spam
Perdona pone Cells no ceñis
el corrector se ha disparado solo te juro que no toqué
"Ignacio Pérez >" <ignaciopsantaella@<hotmail.com> escribió en el mensaje
news:
Hola Osejol:
Si la primera fila contiene los rótulos con esto te tiene que funcionar:
Ceñís.AutoFilter Field:=1, Criteria1:="<>"
Si no es asi me lo comentas...

Un saludo

"Osejol" escribió en el mensaje
news:bvqk4t$q7a$
> Hola de nuevo, al final he dejado el código así:
>
> Sub auxiliar()
> Do
> Application.ScreenUpdating = False
> Sheets("AUXILIAR").Select
> Range("C3").Select
> Selection.Copy
> Range("A65536").Select
> Selection.End(xlUp).Select
> ActiveCell.Offset(1, 0).Range("A2").Select
> Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone,
> SkipBlanks:=False, Transpose:=False
> Sheets("PRINCIPAL").Select
> Loop While Range("B1").Value > 0
> End Sub
>
> y parece que funciona
>
> sin embargo, algo que hasta ahora funcionaba bien ha dejado de hacerlo y
> bloquea el fichero, lo siguiente:
>
> Sub filtro()
> Sheets("AUXILIAR").Select
> Cells.Select
> Rows("2:2").Select
> Selection.AutoFilter
> Selection.AutoFilter Field:=1, Criteria1:="<>"
> End Sub
>
> Lo uso para seleccionar las filas donde haya contenido.
>
>
> Gracias por la ayuda
>
> Osejol
>
>


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