Επόμενος αριθμός τιμολογίου - Νέα

Το Microsoft Excel προσφέρει πολλά πρότυπα τιμολογίων που μπορείτε να κατεβάσετε. Ωστόσο, δεν υπάρχει ενσωματωμένος τρόπος αύξησης του επόμενου αριθμού τιμολογίου.

Ηχογράφησα αυτό το βίντεο που δείχνει πώς να προσθέσω μερικές γραμμές κώδικα VBA στο βιβλίο εργασίας σας, ώστε να μπορείτε να αποθηκεύσετε κάθε τιμολόγιο ως νέο αρχείο. Στη συνέχεια, η μακροεντολή διαγράφει το τιμολόγιο και προσθέτει 1 στον αριθμό τιμολογίου.

Με 166 χιλιάδες προβολές και εκατοντάδες σχόλια, βρίσκω ότι οι ίδιες ερωτήσεις εμφανίζονται ξανά και ξανά. Δεν είναι πρακτικό να ζητάμε από τους ανθρώπους να διαβάζουν 800 σχόλια, επειδή η απάντηση στην ερώτησή τους έχει αναρτηθεί έξι φορές πριν. Έτσι - για δημοφιλείς ερωτήσεις, δημοσιεύω τον κωδικό εδώ.

Συχνές ερωτήσεις # 1

Μπορείτε να πληκτρολογήσετε τον κωδικό για μένα επειδή δεν μπορώ να πληκτρολογήσω;

Sub NextInvoice() Range("E5").Value = Range("E5").Value + 1 Range("A20:E39").ClearContents End Sub Sub SaveInvoiceWithNewName() Dim NewFN As Variant ' Copy Invoice to a New Workbook ActiveSheet.Copy NewFN = "C:aaaInv" & Range("E5").Value & ".xlsx" ActiveWorkbook.SaveAs NewFN, FileFormat:=xlOpenXMLWorkbook ActiveWorkbook.Close NextInvoice End Sub

Συχνές ερωτήσεις # 2

Θέλω να αποθηκεύσω το τιμολόγιο ως PDF σε υπολογιστή με Windows

Σημείωση

Αυτός ο κωδικός λειτουργεί μόνο σε εκδόσεις των Windows του Excel 2010 ή νεότερες. Υπάρχει διαφορετικός κωδικός για Mac.

Πρέπει να επιλέξετε το εύρος που περιέχει το τιμολόγιο και να κάνετε Διάταξη σελίδας, Περιοχή εκτύπωσης, Ορισμός περιοχής εκτύπωσης. Εάν παραλείψετε αυτό το βήμα, τότε τα κουμπιά που χρησιμοποιούνται για την εκτέλεση της μακροεντολής θα εμφανίζονται στο τιμολόγιό σας!

Sub SaveInvoiceAsPDFAndClear() Dim NewFN As Variant NewFN = "C:aaaInv" & Range("E5").Value & ".pdf" ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=NewFN, _ Quality:=xlQualityStandard, IncludeDocProperties:=True, _ IgnorePrintAreas:=False, OpenAfterPublish:=False Range("E5").Value = Range("E5").Value + 1 Range("A20:E39").ClearContents End Sub

Συχνές ερωτήσεις # 3

Θέλω να αποθηκεύσω το τιμολόγιο ως αρχείο Excel και PDF σε διαφορετικό φάκελο

Sub SaveInvoiceBothWaysAndClear() Dim NewFN As Variant ' Create the PDF First NewFN = "C:aaaPDFInvoicesInv" & Range("E5").Value & ".pdf" ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=NewFN, _ Quality:=xlQualityStandard, IncludeDocProperties:=True, _ IgnorePrintAreas:=False, OpenAfterPublish:=False ' Next, Save the Excel File ActiveSheet.Copy NewFN = "C:aaaInv" & Range("E5").Value & ".xlsx" ActiveWorkbook.SaveAs NewFN, FileFormat:=xlOpenXMLWorkbook ActiveWorkbook.Close ' Increment the invoice number Range("E5").Value = Range("E5").Value + 1 ' Clear out the invoice fields Range("A20:E39").ClearContents End Sub

Συχνές ερωτήσεις # 4

Ο αριθμός τιμολογίου μου έχει αριθμούς και γράμματα

Θα πρέπει να προσαρμόσετε τον κωδικό. Να μερικά παραδείγματα. Η Heidi έχει έναν αριθμό τιμολογίου όπως το SS15001. Όταν κοιτάζω αυτόν τον αριθμό τιμολογίου, είναι ένα πρόθεμα δύο γραμμάτων ακολουθούμενο από 5 ψηφία. Ο νέος αριθμός τιμολογίου πρέπει να χρησιμοποιεί το LEFT (, 2) και το MID (, 3,5):

Range("E5").Value = Left(Range("E5").Value, 2) & 1 + Mid(Range("E5").Value, 3, 5)

Εδώ είναι ένα πιο περίπλοκο παράδειγμα. Ο αριθμός τιμολογίου είναι IN-1234-HA όπου το IN σημαίνει το τιμολόγιο. Το 1234 είναι ένας διαδοχικός αριθμός. Το HA είναι το πρώτο γράμμα του ονόματος πελάτη που βρίσκεται στο B10.

LeftPart = Left(Range("E5").Value, 3) MidPart = Left(Range("E5").Value, 4, 4) + 1 EndPart = Left(Range("A10").Value, 2) Range("E5").Value = LeftPart & MidPart & EndPart

Θα μπορούσατε να απλοποιήσετε τις παραπάνω τέσσερις γραμμές ως εξής:

Range("E5").Value = Left(Range("E5").Value, 3) & Left(Range("E5").Value, 4, 4) + 1 & Left(Range("A10").Value, 2)

Συχνές ερωτήσεις # 5

Έχω άλλες μακροεντολές στο βιβλίο εργασίας (όπως το SpellNumber) και χρειάζομαι να αποθηκεύονται και οι μακροεντολές.

Προκειμένου να επιτρέψετε στις υπόλοιπες μακροεντολές σας να εκτελεστούν προκειμένου να λειτουργήσει η λειτουργία Numbers-to-Words, η στρατηγική είναι λίγο διαφορετική. Αντί να αντιγράψετε μόνο το φύλλο τιμολογίου σε ένα νέο βιβλίο εργασίας και να χρησιμοποιήσετε το SaveAs, θα (α) Θυμηθείτε τη διαδρομή και το όνομα αρχείου του βιβλίου εργασίας, (β) Χρησιμοποιήστε το SaveAs για να αποθηκεύσετε ολόκληρο το βιβλίο εργασίας με τον αριθμό τιμολογίου στο όνομα, (c ) Διαγράψτε το αρχικό βιβλίο εργασίας. (δ) Χρησιμοποιήστε το SaveAs για να αποθηκεύσετε το βιβλίο εργασίας με το αρχικό όνομα.

Sub SaveInvoiceWithNewName() Dim OrigFN as Variant Dim NewFN As Variant ' Remember the original path and file name OrigFN = ThisWorkbook.FullName NewFN = "C:aaaInv" & Range("E5").Value & ".xlsx" ' Save a copy with the new name ActiveWorkbook.SaveAs NewFN, FileFormat:=xlOpenXMLWorkbook ' Delete the original workbook so you can save without warning On Error Resume Next Kill (OrigFN) On Error Goto 0 ' Save again as the original file name ActiveWorkbook.SaveAs OrigFN, FileFormat:=xlOpenXMLWorkbook NextInvoice End Sub

Συχνές ερωτήσεις # 6

Πρέπει να προστατεύσω το φύλλο εργασίας, ώστε οι υπάλληλοί μου να μπορούν να αλλάξουν μόνο ορισμένα κελιά. Όταν εκτελώ τη μακροεντολή σας, λαμβάνω "Το κελί που προσπαθείτε να αλλάξετε προστατεύεται και επομένως μόνο για ανάγνωση"

Μπορείτε να αποπροστατεύσετε το φύλλο στη μακροεντολή, να γράψετε τον νέο αριθμό τιμολογίου και, στη συνέχεια, να προστατέψετε το φύλλο. Αυτό πρέπει να γίνει μόνο στη μακροεντολή NextInvoice. Η άλλη μακροεντολή δεν κάνει αλλαγές σε κανένα κελί. Εδώ είναι ο κωδικός εάν χρησιμοποιείτε προστασία χωρίς κωδικό πρόσβασης:

Sub NextInvoice() ActiveSheet.Unprotect Range("E5").Value = Range("E5").Value + 1 Range("A20:E39").ClearContents ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True End Sub Here is the code if you have protected the sheet with a password of Tomato. Note that the password appears in this code twice. Change the password to the real password in two places. Sub NextInvoice() ActiveSheet.Unprotect Password:="Tomato" Range("E5").Value = Range("E5").Value + 1 Range("A20:E39").ClearContents ActiveSheet.Protect Password:="Tomato", DrawingObjects:=True, Contents:=True, Scenarios:=True End Sub

Συχνές ερωτήσεις # 7

Δεν θέλω να έχω το κουμπί Αποθήκευση στο Αποθηκευμένο βιβλίο εργασίας

Αυτό είναι δύσκολο επειδή το όνομα του σχήματος σας θα αλλάξει όταν το φύλλο εργασίας μετακινηθεί σε ένα νέο βιβλίο εργασίας. Ακολουθήστε πολύ προσεκτικά αυτά τα βήματα:

  1. Ανοίξτε το βιβλίο εργασίας μακροεντολής τιμολογίου
  2. Κάντε δεξί κλικ στην καρτέλα φύλλων που περιέχει το τιμολόγιό σας. Επιλέξτε Μετακίνηση ή Αντιγραφή.
  3. Στο αναπτυσσόμενο μενού To Book: επιλέξτε Νέο βιβλίο. Επιλέξτε το πλαίσιο ελέγχου για Δημιουργία αντιγράφου. Κάντε κλικ στο OK. Αυτό το βήμα 3 προσομοιώνει το ActiveSheet.Copy στο VBA.
  4. Τώρα που έχετε το φύλλο εργασίας τιμολογίου σε ένα νέο βιβλίο εργασίας, κάντε κλικ Ctrl στο σχήμα που θέλετε να διαγράψετε. Ctrl + Click θα επιλέξει το σχήμα χωρίς να εκτελεστεί η μακροεντολή.
  5. Με το επιλεγμένο σχήμα, κοιτάξτε στα αριστερά της γραμμής τύπων. Το πλαίσιο ονόματος θα εμφανίσει ένα όνομα όπως "Στρογγυλεμένο ορθογώνιο 1". Δημιουργήστε πολύ προσεκτικά μια νέα γραμμή κώδικα για να διαγράψετε αυτό το σχήμα όπως φαίνεται παρακάτω αμέσως μετά το ActiveSheet. Αντιγραφή:
Sub SaveInvoiceWithNewName() Dim NewFN As Variant ' Copy Invoice to a New Workbook ActiveSheet.Copy ActiveSheet.Shapes("Rounded Rectangle 1").Delete NewFN = "C:aaaInv" & Range("E5").Value & ".xlsx" ActiveWorkbook.SaveAs NewFN, FileFormat:=xlOpenXMLWorkbook ActiveWorkbook.Close NextInvoice End Sub

Αντιμετώπιση προβλημάτων και μηνύματα σφάλματος

  1. Οι ακόλουθες δυνατότητες δεν μπορούν να αποθηκευτούν σε βιβλία εργασίας χωρίς μακροεντολές: VB Project. Απάντηση: Το αρχείο σας αποθηκεύεται αυτήν τη στιγμή ως αρχείο XLSX. Είμαι εξίσου ενοχλημένος που η Microsoft επέλεξε να χρησιμοποιήσει έναν κατεστραμμένο τύπο αρχείου ως προεπιλογή. Χρησιμοποιήστε το File, SaveAs και αλλάξτε τον τύπο αρχείου σε XLSB ή XLSM.
  2. Type Mismatch. Answer: The code expects your invoice number to be a number. If you have SS15001 as an invoice number, you will have to figure out how to adapt your code. See FAQ #4 above.
  3. Compile error Expected line number or label or statement or end of statement on NewFN = “F:RobinusinessPCreceiptsInv” & Range(“H10”).Value & “.xlsx”. Answer: VBA does not like slanted quotation marks (also called Typographers quotes). Type the quotation mark in VBA and you will get "F:RobinusinessPCreceiptsInv" & Range("H10").Value & ".xlsx"
  4. We couldn't find C:UserJelenDocuments" Answer: The file path has to be exact. Are you sure you didn't mean C:UsersJelenDocuments? (Note the "s" at the end of users)
  5. Σφάλμα χρόνου εκτέλεσης 1004. Το έγγραφο δεν αποθηκεύτηκε. Απάντηση: Η διαδρομή του αρχείου πρέπει να είναι ακριβής. Λίγο πριν την αποθήκευση του αρχείου προσθέστε μια νέα γραμμή με το MsgBox NewFN. Εκτελέστε τον κωδικό. Θα εμφανιστεί ένα πλαίσιο που θα δείχνει τη διαδρομή αρχείου και το όνομα του αρχείου. Βεβαιωθείτε ότι υπάρχει διαχωριστής διαδρομής μεταξύ της διαδρομής και του ονόματος αρχείου.
  6. Σφάλμα χρόνου εκτέλεσης «1004». Η μέθοδος "SaveAs" του αντικειμένου "_Workbook" απέτυχε. Απάντηση: Το FileFormat πρέπει να είναι FileFormat: = xlOpenXMLWorkbook. Όταν το διαβάσετε, θα πρέπει να ακούγεται σαν "Excel Open XML Workbook". Δεν είναι Ex One Open XML Workbook. Ναι, προκαλεί σύγχυση ότι το νούμερο 1 και το μικρό γράμμα L μοιάζουν στο βίντεο. 1 λ. Αλλάξτε το X1OPENXMLWORKBOOK σε XLOPENXMLWORKBOOK.

ενδιαφέροντα άρθρα...