necesito ayuda

04/10/2003 - 13:42 por Luis Mari | Informe spam
Hola,

Necesito que un campo de una tabla excel tenga un contador. Quiero hacer
facturas, tengo la plantilla preparada pero necesito que cuando abra una
hoja para preparar nueva factura, mire en la carpeta donde guardo las
facturas la cantidad de excel que hay y ponga el nº siguiente, es decir, que
me numere las facturas.
¿Como se puede hacer esto??

Gracias de antemano.
Un saludo al grupo
 

Leer las respuestas

#1 Fernando Arroyo
04/10/2003 - 21:10 | Informe spam
Mira si te sirve este código, que deberás pegar en el módulo del libro de tu plantilla (en ThisWorkbook):


Option Explicit
Const strRuta As String = "C:\Facturas\" 'Ruta donde se guardarán las facturas (poner la que se desee).
Dim strNombreLibro As String

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Static blnRecursiva As Boolean
If blnRecursiva Then Exit Sub
If Me.Path <> "" Then Exit Sub

Dim intRespuesta As Integer

intRespuesta = MsgBox(prompt:="¿Desea salir sin guardar esta factura?" & vbNewLine & vbNewLine & "<Sí> para cerrar el libro sin guardarlo. " & vbNewLine & "<No> para guardar la factura como " & strNombreLibro & ".xls y cerrar el libro." & vbNewLine & "<Cancelar> para volver al libro sin guardarlo.", Buttons:=vbYesNoCancel + vbQuestion)
If intRespuesta = vbYes Then
Cancel = True
blnRecursiva = True
Me.Close savechanges:=False
ElseIf intRespuesta = vbNo Then
Application.EnableEvents = False
Me.SaveAs Filename:=strNombreLibro, FileFormat:=xlWorkbookNormal
Application.EnableEvents = True
ElseIf intRespuesta = vbCancel Then
Cancel = True
End If
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If Me.Path <> "" Then Exit Sub
Application.EnableEvents = False
Me.SaveAs Filename:=strNombreLibro, FileFormat:=xlWorkbookNormal
Application.EnableEvents = True
Cancel = True
ActiveWindow.Caption = strNombreLibro
End Sub

Private Sub Workbook_Open()
If Me.FileFormat = xlTemplate Or Me.Path <> "" Then Exit Sub

Dim fsB As FileSearch
Dim intNuevoNúmero As Integer
Set fsB = Application.FileSearch

With fsB
.NewSearch
.LookIn = strRuta
.SearchSubFolders = False
.Filename = "Fact*.xls"
If .Execute() = 0 Then intNuevoNúmero = 1 Else intNuevoNúmero = fsB.FoundFiles.Count + 1
End With

Me.Worksheets("Hoja1").Range("A1") = intNuevoNúmero 'El número de factura se pondría en A1
strNombreLibro = strRuta & "Fact" & Right("000" & intNuevoNúmero, 4)
ActiveWindow.Caption = strNombreLibro & " - Sin guardar"

Set fsB = Nothing
End Sub


La ruta donde deben almacenarse las facturas se determina en la segunda instrucción (Const strRuta... etc.)
Al basar un libro nuevo en la plantilla, debería aparecer como título de la ventana el nombre de la nueva factura, con la indicación "Sin guardar". La primera vez que se vaya a guardar el libro, ya sea desde el botón correspondiente o desde las opciones "Guardar" o "Guardar como" del menú "Archivo", se guardará automáticamente el libro en el directorio que se haya especificado, sin preguntar nada, con el nombre "Fact" seguido de su número consecutivo, y la indicación "Sin guardar" debería desaparecer. Si después se vuelve a hacer "Guardar como", ya se abrirá el diálogo normal de Excel para ello.

Si se intenta cerrar el libro usando la X de la ventana o las opciones "Cerrar" o "Salir" del menú archivo, se presentará un diálogo preguntando si se quiere cerrar el libro guardándolo o sin guardarlo. Esto también sucederá tan sólo mientras no se haya guardado el libro al menos una vez.

He hecho varias pruebas y parece que todo funciona como debe, pero no estará de más que tú hagas también tus pruebas antes de confiar en el código. Mi consejo es que crees una plantilla y un directorio para estas pruebas.

Una cuestión a tener en cuenta al trabajar de esta forma con plantillas es que el código se propaga a todos los libros basados en ellas, lo que significa que si estuviéramos hablando de muchas facturas, acabarías con unos cuantos Kbs. de código en tu disco duro que no sirven para nada...
Un saludo.


Fernando Arroyo
MS MVP - Excel



"Luis Mari" escribió en el mensaje news:blmbn7$97l$
Hola,

Necesito que un campo de una tabla excel tenga un contador. Quiero hacer
facturas, tengo la plantilla preparada pero necesito que cuando abra una
hoja para preparar nueva factura, mire en la carpeta donde guardo las
facturas la cantidad de excel que hay y ponga el nº siguiente, es decir, que
me numere las facturas.
¿Como se puede hacer esto??

Gracias de antemano.
Un saludo al grupo


Preguntas similares