Plantillas: Como hacer que me guarde con un nombre autonumerable

04/09/2003 - 00:51 por Javier Avila | Informe spam
Quiero hacer que al guardar un documento creado en base a una plantilla
este adquiera un numero que vaya cambiando dependiendo del numero de
archivos que guarde y asi sucesivamente.

Javier Avila
System Adminsitrator

Zaphod Beeblebrox: Hey, Ford! How many escape capsules are there? Ford
Prefect: None. Zaphod Beeblebrox: You counted them? Ford Prefect: Twice.

Preguntas similare

Leer las respuestas

#1 Fernando Arroyo
04/09/2003 - 09:41 | Informe spam
Puedes crear una plantilla que tenga el siguiente código en su evento Workbook_Open:

Const strRuta As String = "C:\Prueba\" 'Directorio donde se almacenarán los libros

Private Sub Workbook_Open()
Dim fsB As FileSearch
Set fsB = Application.FileSearch

With fsB
.NewSearch
.LookIn = strRuta
.SearchSubFolders = False
.Filename = "doc*.xls"
If .Execute(SortBy:=msoSortByFileName, SortOrder:=msoSortOrderAscending) > 0 Then
Me.SaveAs Filename:=strRuta & "doc" & Right("0000" & Mid(fsB.FoundFiles(fsB.FoundFiles.Count), Len(fsB.FoundFiles(fsB.FoundFiles.Count)) - 7, 4) + 1, 4)
Else
Me.SaveAs Filename:=strRuta & "doc0001", FileFormat:=xlWorkbookNormal
End If
End With
End Sub


Para que funcione tendrás que:
- crear un nuevo libro
- pegar el código en el módulo del libro (ThisWorkbook)
- guardar el libro como plantilla

Los libros basados en esta plantilla serán grabados automáticamente nada más ser creados, con el nombre "doc" seguido de un número de orden consecutivo, en el directorio C:Prueba.

Es seguro que tendrás que adaptar el código a lo que necesites, pero espero que te pueda servir como punto de partida.
Un saludo.


Fernando Arroyo
MS MVP - Excel



"Javier Avila" escribió en el mensaje news:
Quiero hacer que al guardar un documento creado en base a una plantilla
este adquiera un numero que vaya cambiando dependiendo del numero de
archivos que guarde y asi sucesivamente.

Javier Avila
System Adminsitrator

Zaphod Beeblebrox: Hey, Ford! How many escape capsules are there? Ford
Prefect: None. Zaphod Beeblebrox: You counted them? Ford Prefect: Twice.

Respuesta Responder a este mensaje
#2 Javier Avila
05/09/2003 - 00:01 | Informe spam
Primero que nada gracias por tu tiempo, creí que nadie me iba a poder
ayudar.
Copié el contenido del mensaje en el workbook como me indicaste y lo
guarde como .xlt, noté que aunque abriese el archivo para editarlo
(siendo este una plantilla) tambien eutoejecutaba el comando de
me.SaveAs Filename:=... etc., eso era exactamente lo que necesitaba el
problema es que no puede autonumerar, ya que sigue queriendo crear un
archivo llamado doc0001.xls cada vez que me meto al archivo y me
pregunta si quiero sobreescribir el archivo anterior llamado
doc0001.xls, será que me podes dar una mano con eso mas? :D, gracias de
nuevo por tu interés.

Fernando Arroyo wrote:
Puedes crear una plantilla que tenga el siguiente código en su evento Workbook_Open:

Const strRuta As String = "C:\Prueba\" 'Directorio donde se almacenarán los libros

Private Sub Workbook_Open()
Dim fsB As FileSearch
Set fsB = Application.FileSearch

With fsB
.NewSearch
.LookIn = strRuta
.SearchSubFolders = False
.Filename = "doc*.xls"
If .Execute(SortBy:=msoSortByFileName, SortOrder:=msoSortOrderAscending) > 0 Then
Me.SaveAs Filename:=strRuta & "doc" & Right("0000" & Mid(fsB.FoundFiles(fsB.FoundFiles.Count), Len(fsB.FoundFiles(fsB.FoundFiles.Count)) - 7, 4) + 1, 4)
Else
Me.SaveAs Filename:=strRuta & "doc0001", FileFormat:=xlWorkbookNormal
End If
End With
End Sub


Para que funcione tendrás que:
- crear un nuevo libro
- pegar el código en el módulo del libro (ThisWorkbook)
- guardar el libro como plantilla

Los libros basados en esta plantilla serán grabados automáticamente nada más ser creados, con el nombre "doc" seguido de un número de orden consecutivo, en el directorio C:Prueba.

Es seguro que tendrás que adaptar el código a lo que necesites, pero espero que te pueda servir como punto de partida.
Un saludo.


Fernando Arroyo
MS MVP - Excel



"Javier Avila" escribió en el mensaje news:

Quiero hacer que al guardar un documento creado en base a una plantilla
este adquiera un numero que vaya cambiando dependiendo del numero de
archivos que guarde y asi sucesivamente.

Javier Avila
System Adminsitrator

Zaphod Beeblebrox: Hey, Ford! How many escape capsules are there? Ford
Prefect: None. Zaphod Beeblebrox: You counted them? Ford Prefect: Twice.







Javier Avila
System Adminsitrator

Los cambios importantes de diseño se solicitarán cuando el proceso de
fabricación esté a punto de terminar.
Respuesta Responder a este mensaje
#3 Fernando Arroyo
05/09/2003 - 10:13 | Informe spam
El problema es que el código no está pensado para esa forma de trabajar. Lo normal es diseñar la plantilla y sólo entonces poner el código para autonumerar los libros, o también situar esta instrucción al principio del mismo:

If Me.FileFormat = xlTemplate Then Exit Sub

para evitar que se ejecute si dicha ejecución se produce desde la plantilla.

Los libros se crean basándose en la plantilla (Archivo->Nuevo), y en este caso el código sí trabaja como debe: guarda el libro recién creado en el directorio que se haya establecido en la instrucción Const, con el número siguiente al último.

Lo que te está sucediendo es que, al abrir la plantilla en sí en lugar de basar los nuevos libros en ella, el código está guardando los libros nuevos como plantillas (extensión .XLT), y dudo que esto sea lo que te interesa. Pero como la búsqueda la hace de los ficheros que empiecen por "doc" y cuya extensión sea .XLS, no incrementa el número (porque no los encuentra dado que no existen), y siempre intenta guardar el primero de la serie (doc0001.xls)

Para poder modificar el código, necesito saber:
- ¿Realmente necesitas abrir la plantilla en lugar de basar los libros en ella?
- Y si la respuesta a la pregunta anterior es afirmativa, ¿lo que quieres guardar es un libro (extensión .xlt) o de nuevo la plantilla, pero con el número siguiente?

Un saludo.


Fernando Arroyo
MS MVP - Excel


"Javier Avila" escribió en el mensaje news:%239$
Primero que nada gracias por tu tiempo, creí que nadie me iba a poder
ayudar.
Copié el contenido del mensaje en el workbook como me indicaste y lo
guarde como .xlt, noté que aunque abriese el archivo para editarlo
(siendo este una plantilla) tambien eutoejecutaba el comando de
me.SaveAs Filename:=... etc., eso era exactamente lo que necesitaba el
problema es que no puede autonumerar, ya que sigue queriendo crear un
archivo llamado doc0001.xls cada vez que me meto al archivo y me
pregunta si quiero sobreescribir el archivo anterior llamado
doc0001.xls, será que me podes dar una mano con eso mas? :D, gracias de
nuevo por tu interés.

Fernando Arroyo wrote:
> Puedes crear una plantilla que tenga el siguiente código en su evento Workbook_Open:
>
> Const strRuta As String = "C:\Prueba\" 'Directorio donde se almacenarán los libros
>
> Private Sub Workbook_Open()
> Dim fsB As FileSearch
> Set fsB = Application.FileSearch
>
> With fsB
> .NewSearch
> .LookIn = strRuta
> .SearchSubFolders = False
> .Filename = "doc*.xls"
> If .Execute(SortBy:=msoSortByFileName, SortOrder:=msoSortOrderAscending) > 0 Then
> Me.SaveAs Filename:=strRuta & "doc" & Right("0000" & Mid(fsB.FoundFiles(fsB.FoundFiles.Count), Len(fsB.FoundFiles(fsB.FoundFiles.Count)) - 7, 4) + 1, 4)
> Else
> Me.SaveAs Filename:=strRuta & "doc0001", FileFormat:=xlWorkbookNormal
> End If
> End With
> End Sub
>
>
> Para que funcione tendrás que:
> - crear un nuevo libro
> - pegar el código en el módulo del libro (ThisWorkbook)
> - guardar el libro como plantilla
>
> Los libros basados en esta plantilla serán grabados automáticamente nada más ser creados, con el nombre "doc" seguido de un número de orden consecutivo, en el directorio C:Prueba.
>
> Es seguro que tendrás que adaptar el código a lo que necesites, pero espero que te pueda servir como punto de partida.
> Un saludo.
>
>
> Fernando Arroyo
> MS MVP - Excel
>
>
>
> "Javier Avila" escribió en el mensaje news:
>
>>Quiero hacer que al guardar un documento creado en base a una plantilla
>>este adquiera un numero que vaya cambiando dependiendo del numero de
>>archivos que guarde y asi sucesivamente.
>>
>> Javier Avila
>>System Adminsitrator
>>
>>Zaphod Beeblebrox: Hey, Ford! How many escape capsules are there? Ford
>>Prefect: None. Zaphod Beeblebrox: You counted them? Ford Prefect: Twice.
>
>

Javier Avila
System Adminsitrator

Los cambios importantes de diseño se solicitarán cuando el proceso de
fabricación esté a punto de terminar.

Respuesta Responder a este mensaje
#4 Javier Avila
08/09/2003 - 15:36 | Informe spam
Primero la respuesta al par de preguntas que me hiciste sobre la manera
en que quiero operar con mis plantillas:
no, solo quiero crear una sola plantilla que genere archivos .xls lisos
y normales sin ninguna macro ni SUB.

Sobre para que necesito el libro:
- quiero una plantilla que cada vez que se ejecute osea se abra un
nuevo .xls y se apliquen sus funciones (en este caso que se autoguarde
de entrada connnn un formato docxxxx.xls y que ese archivo excel .xls ya
no tenga la funcion de autogenerar un archivo)
- La otra opción sería que tenga un boton que cuando se presione me
guarde un archivo .xls con el nombre docxxxx.xls y lo mismo, no se
autogenere.

Estoy hablando en resumen que: solo la plantilla .xlt tenga la funcion
de autogenerar un archivo docxxxx.xls.

Por otro lado, el tema ese de que no se puede autogenerar un 0001, 0002,
0003...etc, no lo entendi bien ya que mi hoja esta practicamente
terminada y solo le falta la funcion o macro que haga que se autogenere
un nombre cada que se la abra (aqui se supone que la guardaré como
plantilla)
Inserté la linea "If Me.FileFormat = xlTemplate Then Exit Sub" al
principio del codigo que me habias indicado que copie en workbook ysigue
dandome un error 1004 que no puede guardar en el directorio
"c:\prueba"... a continuacion te muestro mi codigo.
Tambien te comento que el macro crea un documento doc0001.xls en
"misdocumentos\" (y eso que la carpeta mis documentos yo la tengo
guardada en la unidad D:, cabe hacer notar que en esa precisa locacion
tambien tengo guardado el complento .xla que me aconsejaste que se llama
autoguardar que por cierto funciona 10/10)

Private Sub Workbook_Open()
If Me.FileFormat = xlTemplate Then Exit Sub
Const strRuta As String = "C:\Prueba\" 'Directorio donde se
almacenarán los libros
Dim fsB As FileSearch
Set fsB = Application.FileSearch

With fsB
.NewSearch
.LookIn = strRuta
.SearchSubFolders = False
.Filename = "doc*.xls"
If .Execute(SortBy:=msoSortByFileName,
SortOrder:=msoSortOrderAscending) > 0 Then
Me.SaveAs Filename:=strRuta & "doc" & Right("0000" &
Mid(fsB.FoundFiles(fsB.FoundFiles.Count),
Len(fsB.FoundFiles(fsB.FoundFiles.Count)) - 7, 4) + 1, 4)
Else
Me.SaveAs Filename:=strRuta & "doc0001",
FileFormat:=xlWorkbookNormal
End If
End With
End Sub


Fernando Arroyo wrote:
El problema es que el código no está pensado para esa forma de trabajar. Lo normal es diseñar la plantilla y sólo entonces poner el código para autonumerar los libros, o también situar esta instrucción al principio del mismo:

If Me.FileFormat = xlTemplate Then Exit Sub

para evitar que se ejecute si dicha ejecución se produce desde la plantilla.

Los libros se crean basándose en la plantilla (Archivo->Nuevo), y en este caso el código sí trabaja como debe: guarda el libro recién creado en el directorio que se haya establecido en la instrucción Const, con el número siguiente al último.

Lo que te está sucediendo es que, al abrir la plantilla en sí en lugar de basar los nuevos libros en ella, el código está guardando los libros nuevos como plantillas (extensión .XLT), y dudo que esto sea lo que te interesa. Pero como la búsqueda la hace de los ficheros que empiecen por "doc" y cuya extensión sea .XLS, no incrementa el número (porque no los encuentra dado que no existen), y siempre intenta guardar el primero de la serie (doc0001.xls)

Para poder modificar el código, necesito saber:
- ¿Realmente necesitas abrir la plantilla en lugar de basar los libros en ella?
- Y si la respuesta a la pregunta anterior es afirmativa, ¿lo que quieres guardar es un libro (extensión .xlt) o de nuevo la plantilla, pero con el número siguiente?

Un saludo.


Fernando Arroyo
MS MVP - Excel




Javier Avila
System Adminsitrator

LEY DE BAXTER. El error en la premisa aparecerá en la conclusión.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida