plantilla con macro que genere un .xls sin macro

05/12/2003 - 17:02 por Javier Avila | Informe spam
Hola a todos, saludos!

Tengo unos archivos de plantilla (.xlt) en las que tengo escritos
algunas macro para autogenerar archivos .xls el problema está en que la
macro tambien es 'heredada' al nuevo archivo .xls y cuando abro este me
vuelve a correr la macro y se crea una especie de bucle.
Necesito saber el codigo para que cuando abra el archivo .xls (fruto de
la macro en la plantilla) ya no tenga codigo macro en él, se puede? aqui
va mi codigo:

Dim TC As String
Dim SI As String



Private Sub workbook_open()
'If Not ThisWorkbook.FileFormat = xlTemplate Then Exit Sub
'If Me.FileFormat = xlTemplate Then Exit Sub
Worksheets("ayacucho").Protect UserInterfaceOnly:=True
Const strRuta As String = "C:\Documents and
Settings\Javier\Escritorio\" 'Directorio donde se almacenarán los libros
Me.SaveAs Filename:=strRuta & "Ayacucho" & "-" & Day(Now())
& "-" & Month(Now()) & "-" & Year(Now()), FileFormat:=xlWorkbookNormal
TC = InputBox("Porfavor, ingrese la TC de hoy", "Tasa de Cambio")
SI = InputBox("Porfavor, ingrese su saldo incial", "Saldo Inicial")
'ActiveSheet.Unprotect "oki"
Range("K41") = SI
Range("b4") = TC
Range("B3") = Now()
'ActiveSheet.Protect DrawingObjects:=True, Contents:=True,
Scenarios:=True, Password:="oki"
End Sub

Notese que tengo 4 lineas con ' para dejarlas de lado ya que he
intentado que si bien se genere la macro esta pueda evaluar el tipo de
archivo y se anule si es que es .xls pero no me ha dado resultado asi
que la tengo desactivada, espero sugerencias, muchas gracias.


Javier

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
05/12/2003 - 22:04 | Informe spam
hola, Javier !

... archivos de plantilla (.xlt) ... algunas macro para autogenerar archivos .xls
... problema ... la macro ... es 'heredada' al ... .xls y cuando abro este ... vuelve a correr ... una especie de bucle.
... codigo para que ... el ... .xls ... ya no tenga codigo macro en el [...]



en septiembre 9, recuerdo haberte ofrecido tres posibles alternativas para...

1.- deshabilitar macro en ese 'archivo resultado' para que no siga autogenerando mas archivos
=>If Not ThisWorkbook.FileFormat = xlTemplate Then Exit Sub<
2.- que al generar el archivo ya no lleve la macro de autogeneracion
a) 'hacer que' el archivo 'resultante' sea SOLO [la copia de] las hojas 'necesarias'
[suponiendo que el codigo esta SOLO en el modulo del libro 'ThisWorkbook']
b) [una vez 'creado' el archivo 'resultante'] SE ELIMINEN los modulos con una macro =>puse un ejemplo del codigo<
1) no mencionas cual es el error, la falla, o porque no 'funciona' esta propuesta :((
2.b) [al parecer] con esta alternativa tuviste algunos 'problemillas' por versiones de la libreria [extensibility] :((
2.a) no se si has probado con la alternativa 2.a [suponiendo que NO existe algun 'otro' codigo 'util' en la plantilla]

suponiendo que no has hecho la prueba con la alternativa 2.a, y que el 'unico' objetivo de la plantilla es...
'generar' una copia de 'ayacucho' con algunos datos 'frescos' SIN las macros de la plantilla [NINGUNA]
en el modulo de codigo del libro-plantilla ==Private Sub Workbook_Open()
Dim Ruta As String, Hoja As String, Fecha As String, TC As String, SI As String
Ruta = "C:\Documents and Settings\Javier\Escritorio\"
Hoja = "Ayacucho"
Fecha = Format(Date, "-dd-mm-yy")
With Me.Worksheets(Hoja)
.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, Password:="oki", UserInterfaceOnly:=True
TC = InputBox("Porfavor, ingrese la TC de hoy", "Tasa de Cambio")
SI = InputBox("Porfavor, ingrese su saldo incial", "Saldo Inicial")
.Range("k41") = TC
.Range("b4") = SI
.Range("b3") = Now()
.Copy
End With
ActiveWorkbook.SaveAs FileName:=Ruta & Hoja & Fecha, FileFormat:=xlWorkbookNormal
Me.Close False
End Sub

si hay situaciones 'diferentes' a considerar... ¿comentas?
saludos,
hector.
Respuesta Responder a este mensaje
#2 Héctor Miguel
07/12/2003 - 05:34 | Informe spam
hola, Javier !

... no me funciono el metodo 2.b ... clientes con win98 y office 97



==> [en este caso] 'tendrias que' programar en la version 'mas baja' [que se vaya a utilizar] <== :((

... me sigue interesando [...]
1. Que la .xlt genere (via macro) un archivo .xls (por si acaso tengo dos hojas)
2. Que dicho .xls no tenga macro alguna
... macro que me pusiste funciona ... (... faltaria copiar ... 2da hoja ... tambien)
... tendria que lidiar con ... configuracion de macros con los clientes, preferiria el metodo antes mencionado.



==> despues de ver el archivo adjunto, algunos comentarios y preguntas 'adicionales'
1.- [por 'revision'] es necesario efectuar una correccion al codigo 'propuesto':
la 'tasa de cambio' [TC] debe ir en la celda 'b4' y el 'saldo inicial' [SI] va en la celda 'k41' =>estan 'invertidos'<2.- para copiar [al 'nuevo' xls] otras hojas de la plantilla...
a) QUITA [del 'bloque' with] la instrucion =>.Copy<= [que SOLO copia la hoja referida en el bloque with]
b) DESPUES [del 'bloque' with], realiza 'la copia' [al nuevo xls] de las hojas que sean necesarias [p.e.]
=>Me.Sheets.Copy<= crea un libro nuevo con una copia de TODAS las hojas en el libro 'original'
=>Me.Sheets(Array("Hoja1", "Hoja3")).Copy<= hace 'lo propio' con las hojas INDICADAS en el 'array'
INCLUYENDO objetos y los codigos de [que 'pudiera' haber en] sus modulos <= OJO
3.- para que el 'nuevo' xls NO tenga 'macro alguna'... NO DEBE 'haberlas' [tampoco] en sus modulos de codigo :((
[asi, no 'tendrias que lidiar' con la configuracion de macros con los clientes]... 'sin embargo'...
4.- la hoja 'principal' [ayacucho] tiene un boton de comando que REQUIERE de macros [en el modulo de 'la hoja']... 'pero'...
si [realmente] NO quieres macros [en el nuevo xls], entonces aqui 'tenemos un conflicto' :(( ¿como se ha de resolver???
- diciendo 'siempre si' a las macros??? - 'sacrificando' la funcionalidad del boton y las 'comodidades' del usuario???
5.- al hacer copias de las hojas [al nuevo libro], estas 'pasan' SIN la proteccion que tenga/n en el libro 'original'... asi que...
si [realmente] necesitas que las hojas copiadas tengan proteccion, habra que protegerlas EN el nuevo libro... 'pero'...
- ¿como esperas que las 'manipule' el usuario??? - ¿volvemos al conflicto de 'macros si'... o 'macros no'???

[segun yo] hay conflictos cuyas 'posibles' soluciones son 'incompatibles' o 'contradictorias' :(( ¿comentas?
saludos,
hector.
Respuesta Responder a este mensaje
#3 Héctor Miguel
11/12/2003 - 01:31 | Informe spam
hola, Javier !

... gracias por tu tiempo y la dedicación que le pones a las respuestas [...]



es un placer, gracias a ti por el 'feed-back' :))

... opte por sacar el boton de "cuadrar" ... no conicide con la filosofia de simplificar [...]
... con officeXP la macro ... funcionaba, mientras que en el cliente con office 97 no (como debia ser) [...]



el 'problema' con excel-'97 y macros en los botones de 'cuadro de controles' es que...
se necesita establecer en falso la propiedad 'TakeFocusOnClick' en el evento '_Click' del boton [o en la macro]

con relacion al 'resto' del codigo... no le veo 'problemas' :))
'salvo' por el comentario de que las hojas 'copiadas' ya NO estan 'protegidas' y mantienes [todavia] la 'proteccion'

saludos,
hector.
Respuesta Responder a este mensaje
#4 Héctor Miguel
11/12/2003 - 02:04 | Informe spam
hola, Javier !

... algo raro con la macro, cuando cambio el valor: Hoja = "Ayacucho"
... queriendo 'personalizar' ... que cada surcursal tenga una con su respectivo nombre
... sale un error '9' en tiempo de ejecucion ... Subindice fuera de intervalo. Me cuesta encontrar el motivo
... he cambiado la manera en la que se guarda el nombre de la hoja pero ... me sigue dando error [...]



cuando se hace referencia [por su nombre] a un objeto [p.e.] Worlsjeets("Ayacucho") 'pero' ... su nombre 'cambio'
cuando se hace referencia [por su posicion] a un objeto [p.e.] Worksheets(1) 'pero' ... su posicion 'cambio'
es cuando 'aparece' el error 9 =>subindice 'fuera' del intervalo'<=, es decir... NO 'existe' :((

'en principio'... no veo 'problema' si dejas el nombre en 'Ayacucho' [al menos, mientras 'trabaja' el codigo]
al fin y al cabo que el usuario le podra cambiar el nombre a la/s hoja/s segun su criterio o necesidad :))
si 'buscas' tener [un 'cierto'] 'control' sobre el nombre que tendra/n la hoja [y el libro], entonces 'podrias' [p.e.]...
-o- 'pedirle' al usuario un nombre [corto] 'descrpitivo' a traves de un inputbox
-o- 'tomar' el nombre 'apropiado' [del sistema] segun el nombre del usuario [registrado en la aplicacion o en la red]
-o- 'tomar' el nombre de la compañia [similar al anterior]
-o- [...] ¿comentas?

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