sábado, 13 de agosto de 2011

Curso Programación VBA Excel 2010: Ejercicio Práctico Factura.






Saludos!!!!!!!!!!

Continuamos con las sesiones dedicadas a Visual Basic para Excel. Esta sesión es un poco especial. Es la primera en la que voy a intentar responder a dudas que me han planteado dos personas en el Blog, Manuel y Javier.

De vez en cuando prepararé sesiones de este tipo con vuestras dudas y que desconectarán un poco del ritmo que lleva el curso de VBA para Excel que voy publicando. Esta sesión nos va servir para repasar algunos de los conceptos que se han comentado en las sesiones del Curso de VBA para Excel, pero también nos va permitir conocer cosas nuevas.

Esto puede suponer un problema para los que estáis aprendiendo, ya que algunos de los temas que voy a comentar todavía nos faltan unas cuantas sesiones para llegar a ellos.

No voy a explicar todo lo que uso en el vídeo al 100%, algunas cosas necesitarían incluso más de una sesión para su explicación. Lo que voy hacer es dar solución a las dudas, o lo voy a intentar y de algunas de las herramientas que use en la sesión os daré pinceladas para que entendáis que hacen y podáis empezar a investigar un poco por vuestra cuenta.

Manuel, me planteo a grandes rasgos lo siguiente. Quería tener un documento de Excel y crear una copia de ese documento. Además viendo el código que me mando, parece que lo que quiere es coger el nombre que tendrá la copia de una celda y que este nombre sea una fecha. Esto creo que es lo que me pedía Manuel.

Javier de Perú, me pedía que le ayudara a realizar como una plantilla de una factura. Quiere por ejemplo rellenar la factura y que se guarde la factura rellenada pero el archivo original, la plantilla siga intacta para la siguiente factura. Además quiere ir numerando la factura consecutivamente y que esto se haga automáticamente. Esto creo que es lo que me pedía Javier.

Creo que esta sesión es muy interesante porque se tocan muchos conceptos relacionados con los objetos de Excel que se usan habitualmente por ejemplo el trabajo con libros, con hojas y con celdas. Vamos a desarrollar una Factura muy simple.


Todos mis vídeos son Gratis, pero si te gusta mi trabajo, puedes realizar una donación para que pueda continuar con este proyecto. Cualquier cantidad desde 1€/1$ es bienvenida. Gracias!!!!!!!!!!!!!!


Para seguir esta sesión podéis descargar el siguiente archivo que utilizo en el Vídeo. 


Como siempre, aquí tenéis la información del vídeo, enlaces para ver los vídeos y comentarlo en el foro del Blog.

  • Nombre: Curso Programación VBA Excel 2010: Ejercicio Práctico Factura.
  • Nivel: Avanzado.
  • Duración Total: 45m 51s.
  • Duración Vídeo 1: 25m 51s.
  • Duración Vídeo 220m 00s.

Vídeo 1 de 1.

Vídeo 2 de 2.

Nada más. La siguiente sesión la dedicaré a Word pero ya os aviso que tardará un poco. Voy a reorganizar algunas cosas del Blog y del Foro y tengo que dedicarle un poco de tiempo. Saludos a todos.

64 comentarios:

  1. David... nuevamente interesante video. Tengo un problema un poco mas complejo, espero tengas tiempo de ayudarme a resolverlo. Yo trabajo con bases de datos grandes, y mi herramienta del dia a dia son las tablas dinamicas. Como tu sabes, tengo que actualizar la informacion de la base de datos, por lo menos una vez a la semana, y es aca en donde viene mi pregunta, yo necesito agregar campos personalizados que utilizo para mi analisis coemrcial, por decirte algo, con las 3 primeras letras del codigo de cliente lo segmento en un rubro, o si esta enciertos rangos de cantidades, lo coloco en otra clasificacion. Todo esto lo he logrado resolver con VBA y el grabador de macros, pero cuando intento conertir estas bases, y convertilas en tablas dinamicas, con los campos y caracteristicas que necesito, siempre me genera error y me detiene el proceso. He intentado una y otra vez con el grabador de macros, copio exactamente las sentencias, pero nada.

    Pregunta concreta: Como puedo crear y actulizar tablas dinamicas a paratir de VBA????

    Gracias David!!!!

    ResponderEliminar
  2. Carlos, si me puedes enviar el archivo y lo miro mejor. De todas las maneras a ver si tengo un momento y miro algo de lo que tengo para el curso relacionado con las tablas dinámicas. Si tienes problemas para enviarme el archivo por la información que contenga, mándamelo con información ficticia pero que se parezca a la que usas. Así me hare una idea de lo que quieres y además igual es algún pequeño detalle lo que da el problema.

    Saludos.

    ResponderEliminar
  3. hola David felicidades por el blog estoy aprendiendo muchisimo.
    Tengo un problema a la hora de guardar un documento con fecha, y la idea es que cree la fecha automaticamente en que se creo el documento, que eso no tiene mayor problema utilizando hoy(), pero si necesito abrir el documento para rectificarlo no me varie la fecha de creación.
    Resumiendo creo un documento el dia 1 de agosto con la funcion hoy() y si lo abro el 4 de septiembre me aparecerá la fecha 4/09/2011 y a la hora de guardarlo no es la fecha de creación real es la fecha de la modificación.
    gracias.

    ResponderEliminar
  4. Gracias. Ahora mismo estoy en el pueblo de mi mujer un par de días. Cuando vuelva a Pamplona pensamos en esto. De todas las maneras cuando me preguntéis dudas, ayudaría mucho que me mandarais también el archivo, así se puede ver mejor como solucionarlo.

    ResponderEliminar
  5. este es el código q he puesto, la celda en la q esta la fecha viene con formato de fecha, sería bueno, que en tu blog pusieras los códigos para poderlos copiar y evitar errores, o¿ lo haces para obligarnos a trabajar? desde luego haciendo le se aprende mas, un saludo y gracias, eres un crak
    Private Sub cmdBorrarfactura_Click()
    BorrarFactura
    End Sub


    Private Sub BorrarFactura()
    Range("B1").ClearContents
    Range("A6:D7").ClearContents

    End Sub

    Private Sub cmdGuardarFactura_Click()
    GuardarFactura Range("E1"), Range("B1")
    End Sub

    Private Sub GuardarFactura(NumeroFactura As Integer, FechaFactura As Date)
    Dim NuevoDocumento As Workbook
    Dim Nombredocumento As String
    'Dim Factura As Workbooks
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    Application.SheetsInNewWorkbook = 1


    Set NuevoDocumento = Workbooks.Add
    'Set Factura = Workbooks("Factura.xlsm")
    Application.SheetsInNewWorkbook = 3
    Nombredocumento = "Factura Nº" & NumeroFactura & ". " & Format(FechaFactura, dd - mm - yyyy) & ".xlsx"
    NuevoDocumento.SaveAs Filename:=Workbooks("Factura.xlsm").Path & "\" & Nombredocumento
    Workbooks("Factura.xlsm").Worksheets("Factura").Copy Before:=NuevoDocumento.Worksheets("Hoja1")
    'Factura.Worksheets("Factura").Copy Before:=NuevoDocumento.Worksheets("Hoja1")
    'NuevoDocumento .Worksheets("Factura").Copy Before:=NuevoDocumento.Worksheets("Hoja1")

    NuevoDocumento.Worksheets("Factura").Shapes("cmdGuardarFactura").Delete
    NuevoDocumento.Worksheets("Factura").Shapes("cmdBorrarFactura").Delete
    NuevoDocumento.Worksheets("Hoja1").Delete
    NuevoDocumento.Close SaveChanges:=True
    'Set NuevoDocumento = Nothing
    Range("E1") = Range("E1") + 1
    BorrarFactura
    Set NuevoDocumento = Nothing
    End Sub

    ResponderEliminar
  6. aunque firmamos los dos como anónimo no somos el mismo, ni creo q sea el mismo problema yo soy el del comentario de yuotuve, lo q pasa q no coge y por eso te lo he puesto aquí, no se podria hacer lo mismo pero guardando las facturas en word con formato de texto, ya que son solo para archivarlas, y asi ocuparía menos sitio?

    ResponderEliminar
  7. Hola

    Primero al primer anónimo, ya tengo localizado el problema, es en esta línea.

    Nombredocumento = "Factura Nº" & NumeroFactura & ". " & Format(FechaFactura, dd - mm - yyyy) & ".xlsx"

    Faltan las comillas dobles alrededor del formato de la fecha, quedaría así:

    Format(FechaFactura, "dd-mm-yyyy")

    También le he quitado los espacios que había entre los guiones, a mi me gusta más sin espacios, pero lo que daba el problema era que el formato que aplica la instrucción Format debe ir entre comillas dobles.

    En cuanto a lo de obligaros a trabajar un poco si que es así, sobre todo para los que empezáis a programar, creo que es mejor que escribáis el código en lugar de copiar y pegar, jejejeje.

    ResponderEliminar
  8. Ahora para el segundo anónimo.

    Si que se podría hacer, de hecho es uno de los temas que tengo pensando tratar. El llevar información de Excel a Word. Quizás prepare una sesión como esta en la que no profundice al 100% en el tema todavía, pero así tengáis unas pistas para empezar en el tema.

    Saludos.

    ResponderEliminar
  9. problema solucionado, gracias, para mandarte los archivos para otar vez q utilizamos el correo electronico?
    un saludo y reiterar las congratulaciones y el agradecimiento por el trabajo, creo q es el mejor blog para aprender todo claro y ordenado

    ResponderEliminar
  10. Gracias. Si las próximas veces podéis preguntar aquí o en el Foro y me enviáis el archivo por correo electrónico.

    Saludos.

    ResponderEliminar
  11. Hola

    La persona que tenía este problema, si me manda el archivo con lo que tiene hecho mejor. Es que dependiendo de como lo tengas hecho se pueden llegar a diferentes soluciones.

    "hola David felicidades por el blog estoy aprendiendo muchisimo.
    Tengo un problema a la hora de guardar un documento con fecha, y la idea es que cree la fecha automaticamente en que se creo el documento, que eso no tiene mayor problema utilizando hoy(), pero si necesito abrir el documento para rectificarlo no me varie la fecha de creación.
    Resumiendo creo un documento el dia 1 de agosto con la funcion hoy() y si lo abro el 4 de septiembre me aparecerá la fecha 4/09/2011 y a la hora de guardarlo no es la fecha de creación real es la fecha de la modificación.
    gracias."

    Saludos.

    ResponderEliminar
  12. Gracias David y enhorabuena por el blog, te paso ha explicar mi problema, al guardar la factura, si alguno de los campos tiene una formula del tipo
    Si (a2="";"";"Concatenar (A2;A4), la plantilla de la factura queda vacia pero el nuevo archivo en vez de poner la concatenacion pone #¡REF!, y copia la siguiente formula
    =SI(#¡REF!="";"";CONCATENAR(#¡REF!;"/";#¡REF!)), en las celdas, un saludo

    ResponderEliminar
  13. Hola

    Gracias por lo del Blog.

    Si me puedes mandar tu archivo para encontrar el problema mejor. Ya comenté que este ejemplo dependiendo de las necesidades de cada uno, igual había que optar por otras solución o cambiar algún pequeño detalle. Mándamelo y lo miro.

    Saludos.

    ResponderEliminar
  14. Hola

    Ya se cual era el problema. Cuando copiabas la hoja al nuevo documento eliminabas los datos que esas fórmulas utilizaban para calcular los resultados. Esta línea:

    NuevoDocumento.Worksheets("AnexoVIII").Range("G8:J60").Delete

    La solución a la que he llegado que no se si te servirá es que después de realizar la copia de la hoja en el nuevo documento, hago una copia del rango en el que están esas fórmulas con los resultados.

    Y a continuación la pego en las mismas celdas pero pegando solo los valores, los resultados. Es decir al pegar se quita la fórmula y se quedan solo los resultados. Quedaría así:
    NuevoDocumento.Worksheets("AnexoVIII").Range("C13:C34").Copy
    NuevoDocumento.Worksheets("AnexoVIII").Range("C13").PasteSpecial Paste:=xlPasteValues
    NuevoDocumento.Worksheets("AnexoVIII").Range("G8:J60").Delete

    Espero que te sirva. Te mando el archivo con el código.

    Saludos.

    ResponderEliminar
  15. gracias, sirve ,sirve, funciona, la cosa parece sencilla, cuando la sabes, pero las vueltas q había dado yo, poniendo codigo para ocultar filas y soluciones peregrinas, muchas gracias

    ResponderEliminar
  16. Me alegro.

    Yo en los curso de VBA siempre digo lo mismo. Cuanto más sepáis del programa mejor, porque es lo que luego vais a poder utilizar desde código.

    Saludos.

    ResponderEliminar
  17. Sr.David você é o CARA bommmmmm!!!! de VBA e Excel
    estou aprendendo muito com teus videos obrigado
    tenho 66 anos ate 15-11 e comecei o estudo de excel agora. E sei que vou aprender mais com o Sr. muito grato meu E-mail é osvaldojuzenas@hotmail.com.br
    Abraços de Osvaldo e de Todo o Brasil

    ResponderEliminar
  18. Gracias por el comentario Osvaldo.

    Así da gusto seguir. Lo importante es tener ganas de aprender y a usted le sobran.

    Saludos.

    ResponderEliminar
  19. Saludos David
    Te felicito haces un excelente trabajo en el blog, super didactico, pero quede con una duda que no encuentro como resolver. Como seria el codigo para que me imprima la factura creada antes de cerrala,ya que seria buena idea entregarsela al cliente :) porque desde la plantilla saldrian los botones

    ResponderEliminar
  20. Gracias

    En cuanto pueda te lo miro y te pongo por aquí el código. Ahora mismo estoy configurando mi equipo, me costará unos días contestarte,

    Saludos.

    ResponderEliminar
  21. Hola David, como estas, la verdad que he visto tus videos y son muy didácticos, me ayuda mucho a repasar temas que había hecho en la universidad. En la parte que estoy mas interesado es en el tema de VBA, ya que por mi tipo de trabajo tengo que almacenar información en hojas de excel, pero la repetitividad en información y la posibilidad de errar es grande. De ser posible, agradeceré me brindes tu correo para ser mas claro con mi problema de excel y la solución que deseo dar. Gracias por tu tiempo. Saludos desde Lima-Perú. Julio César Campomanes

    ResponderEliminar
    Respuestas
    1. Hola Julio Cesar

      La dirección la tienes arriba a la derecha, justo debajo de lo de donar. Pero ya te aviso que no tengo prácticamente tiempo para resolver dudas que se salgan de los vídeos. Me han dado más trabajo para Febrero y ahora mismo ya ando justo de tiempo incluso para preparar las sesiones del Blog.

      Saludos.

      Eliminar
  22. Soy de mexico segui al pie de la letra el tuto de programacion "Factura" y al ejecutar guardar me sale un mensaje que es el sigueinte: ERROR DE COMPILACION NO SE ENCONTRO ARGUMENTO CON NOMBRE sera que me puedes ayudar esta muy bueno tu blog gracias por tus videos publicados me han servido de mucho te envio el codigo Gracias.

    Private Sub cmdBorrarFactura_Click()
    BorrarFactura
    End Sub

    Private Sub BorrarFactura()
    Range("B8:E12").ClearContents
    Range("B14").ClearContents
    Range("G14").ClearContents
    Range("A17:F33").ClearContents
    End Sub

    Private Sub cmdGuardarFactura_Click()
    GuardarFactura Range("G8"), Range("G14")
    End Sub

    Private Sub GuardarFactura(NumeroFactura As Integer, FechaFactura As Date)
    Dim NuevoDocumento As Workbook
    'Dim Factura As Workbook
    Dim NombreDocumento As String

    Application.SheetsInNewWorkbook = 1
    Set NuevoDocumento = Workbooks.Add
    Application.SheetsInNewWorkbook = 3
    'Set Factura = Workbooks("Factura.xlsm")

    NombreDocumento = "Factura N " & NumeroFactura & ". " & Format(FechaFactura, "dd-mm-yyyy") & ".xlsx"

    NuevoDocumento.SaveAs Filename:=Workbooks("Factura.xlsm").Path & "\" & NombreDocumento
    'NuevoDocumento.SaveAs Filename:=Factura.Path & "\" & NombreDocumento


    Workbooks("Factura.xlsm").Worksheets("Factura").Copy Before:=NuevoDocumento.Worksheets("Hoja1")
    'Factura.Worksheets("Factura").Copy Before:=NuevoDocumento.Worksheets("Hoja1")
    NuevoDocumento.Worksheets("Factura").Shapes("cmdGuardarFactura").Delete
    NuevoDocumento.Worksheets("Factura").Shapes("cmdBorrarFactura").Delete
    NuevoDocumento.Worksheets("Hoja1").Delete

    NuevoDocumento.Close Savechange:=True

    Range("G8") = Range("G8") + 1
    BorrarFactura

    Set NuevoDocumento = Nothing
    'Set Factura = Nothing

    End Sub

    sera que lo elabore bien

    Jorge de mexico te envia saludos y Que Dios te bendiga

    ResponderEliminar
    Respuestas
    1. Gracias. Mándame el archivo mejor, que no lo tengo a mano. Es de los que perdí en el disco duro estropeado. Además así encontraré el problema más rápido.

      Saluodos.

      Eliminar
    2. Esta línea era el problema, se te había olvidado poner la "s" final en "SaveChanges". Habías puestos "SaveChange". Ya te lo he mandado corregido.

      NuevoDocumento.Close Savechanges:=True

      Saludos.

      Eliminar
  23. David, enhorabuena por tu excelente blog formativo. Soy José Luis y te sigo desde Málaga. Es de lo mejor que hay en la red en materia de formación. Sería posible aportar una clase o ejercicio sobre la programación de FORMULARIOS para introducir grandes cantidades de datos de forma más automatizada (p.e. formulario de facturación de proveedores y/o clientes).Lo considero un paso previo a otros ejercicios en los que ya nos enseñas cómo extraer datos e informes programando.
    Gracias mil de antemano.

    ResponderEliminar
    Respuestas
    1. Gracias Jose Luís

      Así da gusto. Si que es un tema que hay que tocar. Primero acabaré el ejercicio de Excel 2007 y después retomaré el tema de Excel 2010 y ahí puede que lo toque.

      O bien, como prepararé otro ejercicio para la 2010 lo toque ahí. Quiero meter todo lo que he aprendido estos meses con la cinta de opciones y estoy ya pensando otro ejercicio.

      Saludos.

      Eliminar
  24. Estimado David:

    Nuevamente agradeciendote por los conocimientos que he adquirido a través de tu blog.

    Te hago una consulta sobre el tema de facturación en excel:

    Tengo un procedimiento en excel 2003 que uso para imprimir la factura en PDF (Impresora PDF CREATOR).

    Pregunto:

    Existe un código genérico que pueda agregar al final del procedimiento para que vuelva a activarse la impresora predeterminada (liberando la impresora PDF CREATOR y que deje nuevamente a la impresora real como titular), sin tener que hacer referencia a la marca y el modelo de la misma.

    Esto con el propósito de que si utilizo el libro en otros lugares, no tenga que reescribir el código para activar la impresora predeterminada con su nombre y su puerto.

    De antemano muchas gracias y disculpa si no soy tan resumijdo en mis ideas.

    ResponderEliminar
    Respuestas
    1. Hola

      Pues la verdad es que yo no lo conozco. Además con la versión 2003 hace mucho que ya no trabajo y no te se decir.

      Para eso son mucho más cómodas las versiones 2007 en adelante que permiten guardar archivos PDF sin usar la impresora. Pero me imagino que si usas la versión 2003 todavía será por que no puedes realizar el cambio a una versión superior.

      De todas las maneras se me ocurre lo siguiente. Si has sido capaz de cambiar la impresora predeterminada a PDF Creator, antes de realizar el cambio, guarda la información de la impresora que estaba predeterminada.

      A continuación haz el cambio para guardar en PDF y cuando acabes vuelve a la impresora predeterminada con la información que habías guardado previamente.

      Igual estoy diciendo una tontería, pero es que no he necesitado hacer esto antes y no se si es posible.

      Saludos.

      Eliminar
    2. Gracias David por responderme.

      Yo creo que es mejor actualizar a la versión de MS Office 2007 o 2010 y problema resuelto.

      Nuevamente muchas gracias por la atención prestada.

      Eliminar
    3. OK, yo también lo creo. Pero hay veces que no depende de nosotros hacer el cambio.

      Saludos.

      Eliminar
  25. Estimado David:

    Nuevamente te agradezco por tus conocimientos. Al fin Pude terminar un mini sistema de facturación e inventario. Gracias al código para guardar con número y fecha factura (que explicaste con lujo de detalles), mi trabajo a quedado de lujo.

    Saludos desde Cali, Colombia

    ResponderEliminar
    Respuestas
    1. Me alegro!!!!! La idea de este blog es que aprendáis, no que os haga yo las cosas. Y si te he ayudado con mis vídeos misión cumplida.

      Saludos.

      Eliminar
  26. Hola David, en verdad me resultaron muy utiles tus tutoriales para lo que yo manejo que son recibos y facturas, se agradece, tengo una duda en particular, cuando guarda la factura en el mismo directorio del archivo xlsm quisiera que me creara automáticamente una carpeta en este mismo directorio, por ejemplo que se llame "Facturas Emitidas" y que dentro de esta factura me guarde mi factura para visualizarla solamente e imprimirla, es decir no editarla, aqui se me ocurre dos métodos para hacer esto, el primero, que cuando me guarde la copia de la hoja en el nuevo archivo bloquee todas sus celdas y solo permita imprimirla. Y el segundo método se me ocurre que cuando guarde la copia del archivo lo haga automáticamente en PDF, de esta manera ya no sera editable. Espero puedas ayudarme con esto, y de nuevo te agradezco mucho tus video tutoriales, que la verdad están 100% comprensibles y entendibles.

    Saludos

    ResponderEliminar
    Respuestas
    1. Hola

      Para lo que tu quieres sería mejor guardarlo en PDF.

      De todas las maneras ahora mismo estoy casi sin tiempo y para las dudas que se salen del contenido de los vídeos establecí unos costes para evitar avalancha de solicitudes, que por cierto estos últimos días se está produciendo, jejeje. En el siguiente enlace puedes leer más al respecto.

      http://davidasurmendi.blogspot.com.es/p/contacta-con-david-asurmendi-ochoa.html

      Saludos.

      Eliminar
  27. Estimado David ante todo dale mi norabuena por su ayuda en sus ejercicios de Excel y otros. Mi pregunta es la siguiente como puedo cambiar para que en vez que me guarde la factura como numero de factura y fecha me lo Guarde con el D.N.I. y la fecha de la factura gracias por todo José

    ResponderEliminar
    Respuestas
    1. No es muy difícil modificar mi código para hacerlo. Suponiendo que el DNI esté en la celda D2, por ejemplo. Quedaría así.

      Nombredocumento = "Factura Nº" & NumeroFactura & ". " & Format(FechaFactura, "dd-mm-yyyy") & ". " & Range("D2") & ".xlsx"

      Lo único que tienes que hacer es añadir la celda en la que está el Nif como lo he hecho yo.

      Saludos.

      Eliminar
    2. hola David
      Soy Miguel, en primer lugar mi agradecimiento por tus sabias lecciones.
      intento hacer lo que propone Anónimo el (12 de abril 2013) con tu respuesta y me da un (error de compilación:el argumento no es opcional). te envio el codigo

      Private Sub cmdBorrarFactura_Click()
      BorrarFactura
      End Sub


      Private Sub BorrarFactura()

      Range("A6:D7").ClearContents

      End Sub

      Private Sub cmdGuardarFactura_Click()
      GuardarFactura Range("E1"), Range("B1")
      End Sub

      Private Sub GuardarFactura(NumeroFactura As Integer, FechaFactura As Date, B2 As Integer)
      Dim NuevoDocumento As Workbook
      'Dim Factura As Workbook
      Dim NombreDocumento As String
      Dim B2
      Application.DisplayAlerts = False
      Application.ScreenUpdating = False
      Application.SheetsInNewWorkbook = 1
      Set NuevoDocumento = Workbooks.Add
      'Set Factura = Workbooks("Factura.xlsm")

      NombreDocumento = " Factura Nº " & NumeroFactura & ". " & Format(FechaFactura, "dd-mm-yyy") & ". " & Range("B2") & ".xlsx"

      NuevoDocumento.SaveAs Filename:=Workbooks("Factura.xlsm").Path & "\" & NombreDocumento
      'NuevoDocumento.SaveAs Filename:=Factura.Path & "\" & NombreDocumento

      Workbooks("Factura.xlsm").Worksheets("Factura").Copy Before:=NuevoDocumento.Worksheets("Hoja1")
      'Factura.Worksheets("Factura").Copy Before:=NuevoDocumento.worhsheets("hoja1")
      NuevoDocumento.Worksheets("Factura").Shapes("cmdGuardarFactura").Delete
      NuevoDocumento.Worksheets("Factura").Shapes("cmdBorrarFactura").Delete
      NuevoDocumento.Worksheets("Hoja1").Delete


      NuevoDocumento.Close SaveChanges:=True

      Range("E1") = Range("E1") + 1
      BorrarFactura

      Set NuevoDocumento = Nothing
      'Set Factura = Nothing
      Application.DisplayAlerts = True
      Application.DisplayAlerts = True
      Application.SheetsInNewWorkbook = 3
      End Sub

      te animo a continuar con esta labor.
      Gracias.
      un abrazo

      Eliminar
    3. En qué linea te da el error????

      Saludos.

      Eliminar
    4. hola David. QUE RAPIDO.

      en:

      Private Sub cmdGuardarFactura_Click()
      GuardarFactura Range("E1"), Range("B1")

      Eliminar
    5. No te acostumbres por que no es lo normal ;)

      Cuando llamas al procedimiento GuardarFactura le pasas dos argumentos y en la declaración tiene tres. Hablo de memoria pero creo que en mi ejemplo le pasaba dos argumentos, la fecha y el número de factura.

      O te sobra en la declaración uno o te falta en la llamada uno.

      Saludos.

      Eliminar
    6. no me acostumbro, se que tienes poco tiempo. aprecio tus comentarios en lo que valen. Apúntate un chino. espero no ser muy pesado. cuando puedas podías concretar un poco mas la respuesta. Trato de hacer un sistema de facturación para un almacén de materiales de construcción propiedad de mi padre en el que cada cliente tiene distintas cuentas (obras). También me gustaría contactar contigo de forma mas directa, por correo electrónico, si es posible.
      muchas gracias por contestar, si puedo hacer algo por ti, con gusto lo haré.
      un abrazo.

      Eliminar
    7. PD
      lo que quiero que haga es poner el Nº de factura, Fecha, nombre del cliente obra e importe.
      saludos
      Miguel

      Eliminar
    8. En esta línea:

      GuardarFactura Range("E1"), Range("B1")

      Pasas dos argumentos al procedimiento GuardarFactura para que haga su trabajo. Que en principio deberían el número de factura y la fecha.

      Pero en la declaración de ese procedimiento:

      Private Sub GuardarFactura(NumeroFactura As Integer, FechaFactura As Date, B2 As Integer)

      Tienes tres, ese B2 As Integer no se que es pero en la llamada al procedimiento no lo pones.

      En cuanto a lo demás, mi correo está a la derecha... pero para todo lo que son consultas que se salen de los vídeos hay precio. Antes de liarte a hacer nada por tu cuenta mira si no te sale más rentable usar algo que ya exista, como FacturaPlus o similares. Al final las cosas personalizadas salen más caras.

      Saludos.

      Eliminar
    9. Si quieres poner todo eso en el nombre del documento sólo tienes que poner cuatro argumentos en la declaración y en la llamada.

      Private Sub GuardarFactura(NumeroFactura As Integer, FechaFactura As Date, NombreClientes As String, Precio As Currency)

      Y en la lamada

      GuardarFactura Range("E1"), Range("B1"), Range("C1"), Range("F20")

      Los dos últimos ranges me los he inventado porque no se donde tendrás el nombre del cliente y el precio. Debes poner los correctos.

      Saludos.

      Eliminar
    10. Y claro dentro del procedimiento GuardarFactura tendrás que cambiar alguna línea para que se usen esos datos al guardar el documento. Pero eso ya es tu trabajo.

      Saludos.

      Eliminar
  28. tengo una pregunta que no tiene que ver con el tema pero quizá puedan ayudarme, trabajaba en mis macros con la ayuda de los vídeos de David y pues la macro q estaba desarrollando era algo importante para mi y no quería que nadie mas estuviera en capacidad de modificarla por lo que protegí el documento con una clave pero parece que la introduje mal y ahora no se como desbloquear el documento. Alguien sabe una manera efectiva de hacerlo? la clave es bastante segura, tiene letras en mayúscula minúscula números y caracteres.

    De antemano Gracias.

    Por cierto Muchas Gracias a David, He aprendido Varias Cosas.

    ResponderEliminar
    Respuestas
    1. Pues la verdad es que no se si han cambiado las cosas, pero hasta hace poco la situación era esta.

      Si has guardado con formato anterior a la 2007, es decir .xls si se puede. Si guardas con formato 2007 o posterior, es decir .xlsm, no se puede.

      No se si esto último ha cambiado porque no lo he necesitado y no estoy muy informado, pero creo que no.

      Saludos.

      Eliminar
  29. Muchas gracias.Más ejemplos de visual basic ,cuando puedasssss.

    ResponderEliminar
  30. Me gustaría tener más ejemplos,ejercicios pero de forma de sesiones,tutorial,manual de los tuyos.Me gustán muchos y siempre aprendo algo nuevo.Gracias.

    ResponderEliminar
    Respuestas
    1. Tiempo, tiempo y tiempo... Eso es lo que necesito y mientras mi situación económica siga como ahora es algo difícil conseguirlo. Que más quisiera yo que poneros un vídeo cada día. :(

      Saludos.

      Eliminar
  31. Hola David, te scribo para agradercete tu tiempo y felicitarte por la claridad con la que explicas, he aprendido mucho...

    ResponderEliminar
  32. Hola tengo un error 9 subindice fuera del intervalo me podrias pasar tu codigo?

    ResponderEliminar
    Respuestas
    1. Este comentario ha sido eliminado por el autor.

      Eliminar
    2. No lo tengo a mano. Creo que fue de los que murieron e un desastre de mi disco duro.

      Revisa bien, los nombres de las hojas y de los libros que usas, seguro que ahí está el problema. Si no lo solucionas mandamelo, pero solo si es el mismo ejemplo. Si has hecho modificaciones o es para otra cosa que no sea aprender no me lo mandes. No soluciono dudas personales.

      Saludos.

      Eliminar
  33. Hola David. Tengo una duda que necesito resolver. He visto tus vídeos programación VBA concretamente la plantilla de la factura y le estoy haciendo algunos cambios para adaptarla a mis necesidades. Desde la plantilla uso un botón para guardarla como Albarán y otro para guardarlo como factura desde la misma plantilla. Hago los cambios pertinentes en las celdas para que tenga el formato de factura pero no consigo guardarla directamente con un número de factura que he de introducir y dejar intacto el formato de la plantilla. ¿Cömo podría plantearlo?

    ResponderEliminar
    Respuestas
    1. A ver si con el vídeo de hoy encuentras respuestas a tus dudas.

      Saludos.

      Eliminar
  34. Efectivamente he dado con la solución viendo el vídeo. Muchas gracias por el tiempo que dedicas a resolver las dudas de los que no sabemos.
    Gracias y un saludo

    ResponderEliminar
  35. Hola David soy Vicente y ante todo darte las gracias por tu inversión en tiempo y esfuerzo en difundir tus conocimientos en estas aplicaciones. He seguido con entusiasmo estos videos pero no doy con la solución a un error "Error 1004 en tiempo de ejecución" "Error en el método 'Copy' de objeto 'Sheets' al darle al botón "Guardar" . En ocasiones me sale el error "Microsoft Excel dejó de funcionar" y en otras ocasiones no da problema (pero son las menos) y siempre al guardar el albarán. No sé si será abusar pero transcribo el código asociado por si ves el origen del problema. Estoy a punto de desistir. Gracias y saludos cordiales.
    Private Sub GuardarAlb(NumeroAlbaran As Integer, nombre As String)
    Dim NuevoDocumento As Workbook
    Dim NombreDocumento As String
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    Application.SheetsInNewWorkbook = 1
    Set NuevoDocumento = Workbooks.Add
    Application.SheetsInNewWorkbook = 3
    NombreDocumento = "Albarán Nº " & NumeroAlbaran & " - " & nombre & ".xlsm"
    NuevoDocumento.SaveAsFilename:="C:\FACTURACION\ALBARANES\" & NombreDocumento, _ FileFormat:=xlOpenXMLWorkbookMacroEnabled
    Workbooks("PLANTILLA.xlsm").Worksheets.Copy before:=NuevoDocumento.Worksheets("Hoja1")
    NuevoDocumento.Worksheets("Principal").Shapes("cmdBorrarAlb").Delete
    NuevoDocumento.Worksheets("Principal").Shapes("cmdGuardarAlbaran").Delete
    NuevoDocumento.Worksheets("Principal").Shapes("cmdAbrir").Delete
    NuevoDocumento.Worksheets("Principal").Shapes("cmdAltaClientes").Delete
    NuevoDocumento.Worksheets("Principal").Shapes("cmdCopia").Delete
    NuevoDocumento.Worksheets("Hoja1").Delete
    NuevoDocumento.Close SAVECHANGES:=True
    Range("F4") = Range("F4") + 1
    Borrar_albaran
    Set NuevoDocumento = Nothing
    End Sub
    -----------------------------------------------------------------------------
    Private Sub cmdGuardarAlbaran_Click()
    GuardarAlb Range("F4"), Range("L1")
    End Sub



    ResponderEliminar
    Respuestas
    1. Hola soy Vicente. Repasando el código creo que el problema está en que la línea del copy before no había puesto el nombre de la hoja: "Workbooks("PLANTILLA.xlsm").Worksheets("Principal"). copy before.....". Gracias de todos modos y un saludo

      Eliminar
  36. David estoy llevandolo a cabo pero tengo un problema.
    Cuando intento utilizar el boton de guardar me da un error 9
    Y me abre una hoja en blanco desapareciendo mis datos

    ResponderEliminar
  37. David estoy llevandolo a cabo pero tengo un problema.
    Cuando intento utilizar el boton de guardar me da un error 9
    Y me abre una hoja en blanco desapareciendo mis datos

    ResponderEliminar