Asignar eventos a hojas mediante macros

09/07/2004 - 05:25 por Jorge Castillo | Informe spam
Hola grupo:
Quisiera saber si se puede por programación asignar eventos a hojas de
calculo, por ejemplo un procedimiento que se ejecute al activar una hoja de
cálculo. Es decir, crear la hoja con add y asignar un procedimiento al
evento activate. Gracias de antemano, saludos hector:
Jorge

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
09/07/2004 - 08:17 | Informe spam
hola, Jorge !

... por programacion asignar eventos a hojas ... ejemplo un procedimiento que se ejecute al activar una hoja
... crear la hoja con add y asignar un procedimiento al evento activate.



el ejemplo propuesto en seguida...
- agrega una hoja
- agrega codigo a los eventos '_activate' y '_selectionchange' [de la hoja 'recien' creada]
=> toma en cuenta los requerimientos para su uso <
saludos,
hector.
_________
se requiere: establecer una referencia [en vba] a la libreria =>Microsoft Visual Basic for Applications Extensibility<+ la version de la libreria 'depende' de la version [de excel] donde se ha de utilizar
que [obviamente] DEBERA estar 'instalada' en la pc donde se ha de ejecutar [p.e.]
1) en excel 97 => NO DEBE 'tener' numero de version.
2) en excel 2K en adelante => debiera funcionar 'sin problemas' [+/- sera la version 5.3]
3) en excel XP en adelante => REQUIERE [ademas] de un 'ajuste' [en caso de no 'tenerlo'] a las 'Fuentes de confianza'
el 'ajuste' es en: herramientas / macros / seguridad / [pestaña] fuentes de confianza y ...
'poner' una marca en: 'confiar en el acceso a proyectos de visual basic'
en un modulo de codigo 'normal' ==Sub AgregarHojaYEventos()
Dim NomCodHoja As String, Linea1 As Integer
Application.ScreenUpdating = False
With Worksheets.Add
NomCodHoja = ActiveSheet.CodeName
End With
With ActiveWorkbook.VBProject.VBComponents(NomCodHoja).CodeModule
Linea1 = .CreateEventProc("Activate", "Worksheet")
.InsertLines Linea1 + 1, "msgbox ""Activada la hoja ""&me.name"
.InsertLines Linea1 + 2, "msgbox ""¿Viste el mensaje?"",vbyesno"
.DeleteLines .CountOfLines - 1
Linea1 = .CreateEventProc("SelectionChange", "Worksheet")
.InsertLines Linea1 + 1, "if target.address <> ""$B$1"" then exit sub"
.InsertLines Linea1 + 2, "msgbox ""Se ha activado la celda B1"""
.DeleteLines .CountOfLines - 1
End With
SendKeys "%{F4}"
End Sub
Respuesta Responder a este mensaje
#2 Jorge Castillo
10/07/2004 - 13:39 | Informe spam
Hola Héctor Miguel
Muy agradecido, era exactamente lo que estaba buscando. La verdad me asombra
tanto conocimiento, porque antes preguntar hago el esfuerzo y trato de
buscar respuestas y por ninguna parte encontré nada que se le pareciera. Es
de gran valor tu ayuda y la del resto del grupo.
Saludos
Jorge Arturo

"Héctor Miguel" escribió en el mensaje
news:#
hola, Jorge !

> ... por programacion asignar eventos a hojas ... ejemplo un


procedimiento que se ejecute al activar una hoja
> ... crear la hoja con add y asignar un procedimiento al evento activate.

el ejemplo propuesto en seguida...
- agrega una hoja
- agrega codigo a los eventos '_activate' y '_selectionchange' [de la hoja


'recien' creada]
=> toma en cuenta los requerimientos para su uso <>
saludos,
hector.
_________
se requiere: establecer una referencia [en vba] a la libreria =>Microsoft


Visual Basic for Applications Extensibility<> + la version de la libreria 'depende' de la version [de excel] donde se ha
de utilizar
que [obviamente] DEBERA estar 'instalada' en la pc donde se ha de


ejecutar [p.e.]
1) en excel 97 => NO DEBE 'tener' numero de version.
2) en excel 2K en adelante => debiera funcionar 'sin problemas' [+/-


sera la version 5.3]
3) en excel XP en adelante => REQUIERE [ademas] de un 'ajuste' [en caso


de no 'tenerlo'] a las 'Fuentes de confianza'
el 'ajuste' es en: herramientas / macros / seguridad / [pestaña]


fuentes de confianza y ...
'poner' una marca en: 'confiar en el acceso a proyectos de visual


basic'
en un modulo de codigo 'normal' ==> Sub AgregarHojaYEventos()
Dim NomCodHoja As String, Linea1 As Integer
Application.ScreenUpdating = False
With Worksheets.Add
NomCodHoja = ActiveSheet.CodeName
End With
With ActiveWorkbook.VBProject.VBComponents(NomCodHoja).CodeModule
Linea1 = .CreateEventProc("Activate", "Worksheet")
.InsertLines Linea1 + 1, "msgbox ""Activada la hoja ""&me.name"
.InsertLines Linea1 + 2, "msgbox ""¿Viste el mensaje?"",vbyesno"
.DeleteLines .CountOfLines - 1
Linea1 = .CreateEventProc("SelectionChange", "Worksheet")
.InsertLines Linea1 + 1, "if target.address <> ""$B$1"" then exit sub"
.InsertLines Linea1 + 2, "msgbox ""Se ha activado la celda B1"""
.DeleteLines .CountOfLines - 1
End With
SendKeys "%{F4}"
End Sub

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida