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$
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


Respuesta Responder a este mensaje
#2 Héctor Miguel
10/10/2003 - 22:51 | Informe spam
Hola, José Ignacio !

... hoja ... con una rutina ... Auto_Open ... cosas que hace es un Guardar como para preservar el ... original.
... necesito quitarle el codigo al nuevo fichero, o cambiarle el nombre [Auto_Open] ... no vuelva a ejecutar [...]



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.
Respuesta Responder a este mensaje
#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$
Hola, José Ignacio !

> ... hoja ... con una rutina ... Auto_Open ... cosas que hace es un


Guardar como para preservar el ... original.
> ... necesito quitarle el codigo al nuevo fichero, o cambiarle el nombre


[Auto_Open] ... no vuelva a ejecutar [...]

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.


Respuesta Responder a este mensaje
#4 Héctor Miguel
13/10/2003 - 23:12 | Informe spam
Hola, José Ignacio !

... duda ... sigue: ... cambiar el nombre ... sub [...]



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-
Respuesta Responder a este mensaje
#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 !

... duda ... sigue: ... cambiar el nombre ... sub [...]



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-
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida