guardar formularios correlativos

28/08/2006 - 16:40 por Ricardo Peña | Informe spam
He diseñado un formulario, bueno en realidad es una hoja de calculo a la que
le he aplicado formato para "simular" una pantalla de captura y quiero que a
la hora de guardarlo, lo haga siguiendo una pauta, en este caso, una
numeración correlativa.
Los formularios se archivarán todos en la misma carpeta.

Hay algún macro, para automatizar esta función, es decir, que siga el número
correlativo que corresponda, sin tener que introducirlo manualmente?.


Gracias de antemano, un saludo

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
29/08/2006 - 09:20 | Informe spam
hola, Ricardo !

... un formulario... en... una hoja de calculo a la que le he aplicado formato para "simular" una pantalla de captura
... quiero que a la hora de guardarlo, lo haga siguiendo una... numeracion correlativa... se archivaran todos en la misma carpeta.
... macro, para automatizar... que siga el numero correlativo que corresponda, sin tener que introducirlo manualmente?.



1) podrias utilizar alguna celda [p.e. en una hoja oculta] para el 'acumulador' de numeraciones correlativas...
y usar instrucciones con el metodo SaveCopyAs o SaveAs o copiar la hoja en cuestion a un libro nuevo y... [hay mas variantes] ;)

2) [solo que]... si deseas que el numero correlativo sea incrementado -solo- al momento de guardar la plantilla de base...
-> significa que 'esta' ya ha sido modificada por el usuario [entonces, seria conveniente saber si]...
a) necesitas conservar la plantilla de base 'en limpio' [para la siguiente ocasion que se abra] ?
b) importa [o no] que el nuevo documento lleve incluidas las macros del original ? [o prefieres uno sin macros]
c) consideras necesario un mecanismo para prevenir un incremento 'en falso' ? [por si el usuario se arrepiente]

3) otra -posible- alternativa [sin conocer que tan 'pesado' pudiera ser el formato de tu pantalla], pudiera ser p.e.
-> si conservas un solo archivo [como plantilla] y 'administras' los datos variables en otra hoja ?-
[con lo cual] podrias re-construir 'pantallas' anteriores y/o agregar nuevos datos [incluso modificar si fuera necesario] -?-

disculpa que sea tan 'pregunton' :D pero [creo que] consultas de este tipo son [o suelen ser] como una 'punta de iceberg' :))

si consideras que estoy preguntando 'de mas'... prueba con las sugerencias del punto 1 ;)
si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#2 Ricardo Peña
29/08/2006 - 09:57 | Informe spam
Hola, Miguel!

Primero que nada agradecerte la ayuda prestada y lo de preguntón nada de
nada, las cosas tengo que explicarlas bien.

Tienes razón en el punto 2, ya que necesito conservar la plantilla de base
"en limpio" tal y como indicas en el punto a). El punto b no es necesario, no
me importa que lleve las macros del original, pues el documento no pesa
demasiado.
Y en referencia al punto c, si es posible hacerlo, no estaría mal, no lo
habia pensado.

El documento en si no es muy pesado, pero si en vez de hacerlo como dices en
el punto 2, es mas sencillo como indicas en el punto 3, tambien es una opción.


Gracias de nuevo, y espero tu respuesta.



Un saludo,



Ricardo Peña

"Héctor Miguel" escribió:

hola, Ricardo !

> ... un formulario... en... una hoja de calculo a la que le he aplicado formato para "simular" una pantalla de captura
> ... quiero que a la hora de guardarlo, lo haga siguiendo una... numeracion correlativa... se archivaran todos en la misma carpeta.
> ... macro, para automatizar... que siga el numero correlativo que corresponda, sin tener que introducirlo manualmente?.

1) podrias utilizar alguna celda [p.e. en una hoja oculta] para el 'acumulador' de numeraciones correlativas...
y usar instrucciones con el metodo SaveCopyAs o SaveAs o copiar la hoja en cuestion a un libro nuevo y... [hay mas variantes] ;)

2) [solo que]... si deseas que el numero correlativo sea incrementado -solo- al momento de guardar la plantilla de base...
-> significa que 'esta' ya ha sido modificada por el usuario [entonces, seria conveniente saber si]...
a) necesitas conservar la plantilla de base 'en limpio' [para la siguiente ocasion que se abra] ?
b) importa [o no] que el nuevo documento lleve incluidas las macros del original ? [o prefieres uno sin macros]
c) consideras necesario un mecanismo para prevenir un incremento 'en falso' ? [por si el usuario se arrepiente]

3) otra -posible- alternativa [sin conocer que tan 'pesado' pudiera ser el formato de tu pantalla], pudiera ser p.e.
-> si conservas un solo archivo [como plantilla] y 'administras' los datos variables en otra hoja ?-
[con lo cual] podrias re-construir 'pantallas' anteriores y/o agregar nuevos datos [incluso modificar si fuera necesario] -?-

disculpa que sea tan 'pregunton' :D pero [creo que] consultas de este tipo son [o suelen ser] como una 'punta de iceberg' :))

si consideras que estoy preguntando 'de mas'... prueba con las sugerencias del punto 1 ;)
si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.



Respuesta Responder a este mensaje
#3 Héctor Miguel
29/08/2006 - 10:27 | Informe spam
hola, Ricardo !

... necesito conservar la plantilla de base "en limpio"
... no me importa que lleve las macros del original, pues el documento no pesa demasiado.
... al punto c, si es posible hacerlo, no estaria mal, no lo habia pensado...



1) para poder 'trabajar' con lo relacionado al punto c)... va a ser necesario conocer [+/- exactamente]...
todo lo referente a los datos que pasarian a formar parte de alguna base de datos [rangos, tipos de datos, etc.] :)

2) [por lo pronto] te paso un codigo de ejemplo [con comentarios donde estan mis 'supuestos' para que los modifiques]
-> estoy suponiendo que vas a tener una hoja 'oculta' para conservar el correlativo y...
-> para el caso de 'limpiar' la plantila de base [por lo pronto]... te sugiero lo siguiente:
-> selecciona TODAS las celdas que contienen los datos 'variables' y asignales un nombre [p.e. Variables] :))
-> no importa si se trata de rangos no-contiguos... selecciona TODAS las celdas y utiliza la 'caja de nombres'
[a la izquierda de la barra de formulas]

si culquier duda [o informacion adicional]... comentas ?
saludos,
hector.

-> copia-pega las siguientes lineas -> en el modulo de codigo del libro [ThisWorkbook]...

' modifica estas 'constantes' con los valores/textos apropiados :)) '
Private Const Ruta As String = "c:uta y sub\carpetas donde se guardan\los documentos\"
Private Const Base As String = "nombre generico de los documentos correlativos" ' [p.e. Presupuesto] '
Private Const Hoja As String = "nombre de la hoja con la plantilla" ' <= modifica con el nombre real de tu hoja-plantilla base '
Dim Siguiente As Byte, Archivo As String

Private Sub Workbook_Open()
' limpiamos el rango que corresponde a todos los datos 'variables' '
Worksheets(Hoja).Range("variables").ClearContents
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean): Cancel = True
' preguntamos si el proceso UNICO de guardado debe continuar... o no hacemos nada ;) '
If MsgBox("Esta acción guarda un documento nuevo basado en la plantilla utilizada." & vbCr & _
"Por favor... CONFIRMA que es el momento adecuado para guardarlo !!!", _
vbOKCancel + vbInformation, "Esta es una acción importante !!!") = vbCancel Then Exit Sub
' preparamos las variables para la numeracion correlativa '
With Worksheets("hoja oculta") ' <= modifica con el nombre real de alguna hoja OCULTA '
.Range("a1") = .Range("a1") + 1: Siguiente = .Range("a1") ' <= modifica si NO se trata de la celda A1 '
End With
' establecemos cual sera el siguiente nombre-correlativo para el documento nuevo '
Archivo = Base & Format(Siguiente, " 000")
' copiamos la hoja "base" como UNICA hoja de un libro 'nuevo' SIN macros '
Worksheets(Hoja).Copy
' guardamos los cambios en el original para conservar el correlativo '
ThisWorkbook.Save
' y empezamos a trabajar con el archivo del nuevo documento basado en la 'pantilla' '
Range("a1") = Archivo ' <= modifica si el nombre NO se pone en la celda A1 en el documento nuevo '
' inhabiitamos los eventos para que no entorpezcan el proceso '
Application.EnableEvents = False
' guardamos el documento nuevo con su nombre correlativo '
ActiveWorkbook.SaveAs FileName:=Ruta & Archivo, FileFormat:=xlWorkbookNormal
' rehabilitamos los eventos -paso necesario- '
Application.EnableEvents = True
' cerramos el documento 'plantilla' SIN cambios... [queda listo para 'la siguiente'] :)) '
ThisWorkbook.Close False
End Sub
Respuesta Responder a este mensaje
#4 Ricardo Peña
29/08/2006 - 14:02 | Informe spam
Hola, Héctor !

Acabo de probar los codigos funcionan de miedo, mil gracias. Sólo hay algo
que no va bien, y es que el número de la serie (el que debe ser correlativo)
en la hoja oculta, al guardar la hoja principal (la hoja con la plantilla),
no guarda el número correspondiente, lo tengo que cambiar a mano. Se puede
automatizar para que varie el número, y quede grabado para abrirlo de nuevo
la siguiente vez.



Un saludo,


Ricardo Peña.
Respuesta Responder a este mensaje
#5 Héctor Miguel
30/08/2006 - 03:26 | Informe spam
hola, Ricardo !

... Solo hay algo que no va bien, y es que el numero de la serie (el que debe ser correlativo) en la hoja oculta
al guardar la hoja principal (la hoja con la plantilla), no guarda el numero correspondiente, lo tengo que cambiar a mano...



tienes razon :)), en las pruebas inverti el orden de algunos factores y la inhabilitacion de eventos quedo 'despues de...'

despues de la instruccion que hace la copia de la hoja apropiada...
' copiamos la hoja "base" como UNICA hoja de un libro 'nuevo' SIN macros '
Worksheets(Hoja).Copy

cambia el orden de los factores [o mejor dicho]... sustituye el resto del codigo a lo siguiente:

' inhabiitamos los eventos para que no entorpezcan el proceso '
Application.EnableEvents = False
' guardamos los cambios en el original para conservar el correlativo '
ThisWorkbook.Save
' y empezamos a trabajar con el archivo del nuevo documento basado en la 'pantilla' '
Range("a1") = Archivo ' <= modifica si el nombre NO se pone en la celda A1 en el documento nuevo '
' guardamos el documento nuevo con su nombre correlativo '
ActiveWorkbook.SaveAs FileName:=Archivo, FileFormat:=xlWorkbookNormal
' rehabilitamos los eventos -paso necesario- '
Application.EnableEvents = True
' cerramos el documento 'plantilla' SIN cambios... [queda listo para 'la siguiente'] :)) '
ThisWorkbook.Close False
End Sub

si cualquier duda... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida