cambiar el nombre de una sub

10/10/2003 - 09:01 por José Ignacio Bella | Informe spam
Hola, tengo una hoa excel con una rutina del tipo Auto_Open.
Una de las cosas que hace es un Guardar como para preservar el fichero
original.

Lo que necesito es quitarle el código al nuevo fichero, o cambiarle el
nombre de la sub Auto_Open, para que cuando lo abra no vuelva a ejecutar
esta rutina.

Hasta ahora lo hacía mediante una celda de control, que se rellena con el
primer Auto_Open y se chequea posteriormente, pero me gustaría saber si
puedo trabajar directamente desde Vb con las propias subrutinas (no sé cómo
las trata, o qué tipo de objetos son)

Espero haberme explicado. Gracias por adelantado

Preguntas similare

Leer las respuestas

#1 gti
10/10/2003 - 17:11 | Informe spam
No sé si habré entendido bien. Parece que tienes una rutina que se dispara
cuando abres el libro y que guarda el fichero con otro nombre. Lo que
quieres es ejecutarlo a voluntad.

Genera una macro (con el grabador de macros) que haga lo que quieres. Una
vez grabada la macro puedes ejecutarla a voluntad o copiarla a un programa
de vb (ene ste caso tendrás que hacer alguna modificacion)

"José Ignacio Bella" escribió en el mensaje
news:bm5lfj$in6q4$
Mostrar la cita
cómo
Mostrar la cita
#2 Héctor Miguel
10/10/2003 - 22:51 | Informe spam
Hola, José Ignacio !

Mostrar la cita
opcion 1: 'sujetar' la ejecucion de la macro al nombre del libro 'original' [p.e.]
If ThisWorkbook.Name = "Nombre del libro original" Then Exit Sub
=> FALLA: si se cambia el nombre [explorador de windows] y no coincide con el 'especificado' <
opcion 2: [si NO hay 'otras' macros que sean 'de utilidad' =>en el 'nuevo' fichero<=]
=> copiar [a un nuevo archivo] SOLO la/s hoja/s necesaria/s [p.e.] =>incluyendo 'sus' modulos de clase<== en una macro 'Auto_Open' o en el evento '_Open' del libro ==Sub Auto_Open()
ActiveSheet.Copy
ActiveWorkbook.SaveAs [... etc. etc. etc. ...]
ThisWorkbook.Close False
End Sub

si se trata de 'todas' las hojas =>Sheets.Copy< si se trata de 'algunas' hojas =>Sheets(Array("Hoja1", "Hoja3")).Copy<
opcion 3: 'eliminar' SOLO un modulo que 'contenga' [de preferencia] SOLO la macro 'Auto_Open'
=> de 'preferencia' NO USAR el evento '_Open' del libro sino una macro del tipo 'Auto_Open' <==> REQUISITOS <=1.- establecer una referencia [en el proyecto de vba] a la biblioteca de objetos [segun la version de excel]
excel97 => "Microsoft Visual Basic For Applications Extensibility" =>SIN numero de version< excel2k [o superior] => "Microsoft Visual Basic For Applications Extensibility x.x" =>'generalmente' v. 5.3<2.- tener un modulo ['normal'] 'identificado' [para que sea 'eliminado'] despues de 'ejecutarse el 'Auto_Open'
=> 'poner' en el modulo SOLO la macro 'Auto_Open' [y/o otros codigos 'eliminables'] < => supongo que se le 'da' el nombre de 'Apertura' [al modulo en la ventana de propiedades del editor de vba] < en el modulo 'normal' [ELIMINABLE], una macro 'Auto_Open' ==Sub Auto_Open()
Dim vbC As VBComponent
ThisWorkbook.SaveAs [... etc. etc. etc. ...]
Set vbC = ActiveWorkbook.VBProject.VBComponents("Apertura")
ActiveWorkbook.VBProject.VBComponents.Remove vbC
End Sub

Saludos,
Héctor.
#3 José Ignacio Bella
13/10/2003 - 09:11 | Informe spam
hola hector miguel. lo de preguntar por el libro original está bien, y es
"limpio"
aún así, y a nivel general, la duda que tenía sigue: puedo desde una sub
cambiar el nombre de otra sub del mismo módulo?

gracias



"Héctor Miguel" escribió en el mensaje
news:e$
Mostrar la cita
Guardar como para preservar el ... original.
Mostrar la cita
[Auto_Open] ... no vuelva a ejecutar [...]
Mostrar la cita
'original' [p.e.]
Mostrar la cita
el 'especificado' <>
Mostrar la cita
fichero<=]
Mostrar la cita
=>incluyendo 'sus' modulos de clase<> == en una macro 'Auto_Open' o en el evento '_Open' del libro ==> Sub Auto_Open()
Mostrar la cita
"Hoja3")).Copy<>
Mostrar la cita
la macro 'Auto_Open'
Mostrar la cita
tipo 'Auto_Open' <> ==> REQUISITOS <=> 1.- establecer una referencia [en el proyecto de vba] a la biblioteca de
objetos [segun la version de excel]
Mostrar la cita
=>SIN numero de version<> excel2k [o superior] => "Microsoft Visual Basic For Applications
Extensibility x.x" =>'generalmente' v. 5.3<> 2.- tener un modulo ['normal'] 'identificado' [para que sea 'eliminado']
despues de 'ejecutarse el 'Auto_Open'
Mostrar la cita
'eliminables'] <> => supongo que se le 'da' el nombre de 'Apertura' [al modulo en la
ventana de propiedades del editor de vba] <> en el modulo 'normal' [ELIMINABLE], una macro 'Auto_Open' ==> Sub Auto_Open()
Mostrar la cita
#4 Héctor Miguel
13/10/2003 - 23:12 | Informe spam
Hola, José Ignacio !

Mostrar la cita
su puede 'renombrar' [inclusive] desde 'si-mismo' [p.e.]
en el modulo 'normal' donde esta el 'Auto_Open' ==Sub Auto_Open()
Dim Módulo As CodeModule, L_inicial As Long
Set Módulo = ThisWorkbook.VBProject.VBComponents
("El_módulo").CodeModule
With Módulo
L_inicial = .ProcStartLine("Auto_Open",
vbext_pk_Proc)
.DeleteLines L_inicial
.InsertLines L_inicial, "Private Sub Nuevo_Nombre()"
End With
Set Módulo = Nothing
End Sub

IMPORTANTE: la primer linea del procedimiento
['Auto_Open'] DEBERA SER [precisamente] 'EL PROCEDIMIENTO'
=> NO 'lineas en blanco' NI 'comentarios' <'observa' que cada procedimiento es 'dividido' por lineas
y la primer linea [de texto] del [siguiente] procedimiento
es la inmediata siguiente a la linea ['divisoria']

Saludos,
Héctor.

[mensaje enviado por la interfase web]
-mientras se 'estabiliza' el rendimiento de los servidores-
#5 José Ignacio Bella
14/10/2003 - 08:51 | Informe spam
eres un artista! muchas gracias


"Héctor Miguel" escribió en el mensaje
news:0aaf01c391ce$b6de7a70$
Hola, José Ignacio !

Mostrar la cita
su puede 'renombrar' [inclusive] desde 'si-mismo' [p.e.]
en el modulo 'normal' donde esta el 'Auto_Open' ==Sub Auto_Open()
Dim Módulo As CodeModule, L_inicial As Long
Set Módulo = ThisWorkbook.VBProject.VBComponents
("El_módulo").CodeModule
With Módulo
L_inicial = .ProcStartLine("Auto_Open",
vbext_pk_Proc)
.DeleteLines L_inicial
.InsertLines L_inicial, "Private Sub Nuevo_Nombre()"
End With
Set Módulo = Nothing
End Sub

IMPORTANTE: la primer linea del procedimiento
['Auto_Open'] DEBERA SER [precisamente] 'EL PROCEDIMIENTO'
=> NO 'lineas en blanco' NI 'comentarios' <'observa' que cada procedimiento es 'dividido' por lineas
y la primer linea [de texto] del [siguiente] procedimiento
es la inmediata siguiente a la linea ['divisoria']

Saludos,
Héctor.

[mensaje enviado por la interfase web]
-mientras se 'estabiliza' el rendimiento de los servidores-
Ads by Google
Search Busqueda sugerida