WD97: Macro to Increment Invoice Number To New Form Document

Last reviewed: March 19, 1998
Article ID: Q161309
The information in this article applies to:
  • Microsoft Word 97 for Windows

SUMMARY

With Microsoft Visual Basic for Applications, you can produce a series of document forms containing a number that increments with each new document created. This may be helpful if you are designing an invoice template form and you want to automatically increment the invoice number. The following sample macro increments the value stored in a Microsoft Windows registry entry each time a new document is created based on a custom template.

MORE INFORMATION

Microsoft provides programming examples for illustration only, without warranty either expressed or implied, including, but not limited to, the implied warranties of merchantability and/or fitness for a particular purpose. This article assumes that you are familiar with the programming language being demonstrated and the tools used to create and debug procedures. Microsoft support engineers can help explain the functionality of a particular procedure, but they will not modify these examples to provide added functionality or construct procedures to meet your specific needs. If you have limited programming experience, you may want to contact the Microsoft fee-based consulting line at (800) 936-5200. For more information about the support options available from Microsoft, please see the following page on the World Wide Web:

     
   http://www.microsoft.com/support/supportnet/refguide/default.asp

The following sample Visual Basic for Applications macro must be named AutoNew and stored in a protected form template (protect the template for Forms). If the macro is named AutoNew, the macro will run whenever a new document is created based on the template. The protected form template must contain a form field to contain the invoice number. In the example, the formfield bookmark name is "InvoiceNumber". If you wish to use a different bookmark name for this form field you must change the bookmark name in the macro example as well.

   Sub AutoNew()
      ' If the active document does not contain
      ' a form field, exit this routine.
      If ActiveDocument.FormFields.Count = 0 Then Exit Sub
      ' Create variables.
      Dim sAppName As String
      Dim sSection As String
      Dim sKey As String
      Dim sFieldName As String
      Dim lRegValue As Long
      Dim lFormValue As Long
      Dim iDefault As Integer
      sAppName = "Word 97"
      sSection = "Invoices"
      sKey = "Current Invoice Number"
      ' The default starting number.
      iDefault = 1
      ' If the specified form field doesn't exist,
      ' an error will occur.
      On Error GoTo errhandler
      ' Replace the following example Form Field bookmark name,
      ' "InvoiceNumber", with the name of your form field.
      Set fField = ActiveDocument.FormFields("InvoiceNumber")
      ' Get stored registry value, if any.
      lRegValue = GetSetting(sAppName, sSection, sKey, iDefault)
      ' If the result is zero, set to default value.
      If lRegValue = 0 Then lRegValue = iDefault
      ' Set form field result to stored value.
      fField.Result = CStr(lRegValue)
      ' Increment and update invoice number.
      SaveSetting sAppName, sSection, sKey, lRegValue + 1
   errhandler:
      If Err <> 0 Then
         MsgBox Err.Description
      End If
   End Sub

To Reset the Invoice Number

To reset the invoice number you can use the following sample Visual Basic for Applications macro. The macro will detect if a new starting invoice number has been entered into the form field set to contain the invoice number. To reset the invoice number, type a new value into the form field that contains the invoice number.

The following macro can be assigned to the invoice number form field as an on-exit macro or to a toolbar button or menu.

   Sub ResetInvoiceNumber()
      ' If the active document does not contain
      ' a form field exit this routine.
      If ActiveDocument.FormFields.Count = 0 Then Exit Sub
      ' Create variables.
      Dim sAppName As String
      Dim sSection As String
      Dim sKey As String
      Dim lRegValue As Long
      Dim lFormValue As Long
      Dim iDefault As Integer
      sAppName = "Word 97"
      sSection = "Invoices"
      sKey = "Current Invoice Number"
      iDefault = 1
      ' If the specified form field doesn't exist,
      ' an error will occur.
      On Error GoTo errhandler
      ' Replace the following Form Field bookmark name,
      ' "InvoiceNumber", with the name of your form field.
      Set fField = ActiveDocument.FormFields("InvoiceNumber")
      ' Get stored registry value, if any.
      lRegValue = GetSetting(sAppName, sSection, sKey, iDefault)
      ' If the result is zero, set to default value.
      If lRegValue = 0 Then lRegValue = iDefault
      ' Get value from formfield. The value cannot be null.
      If fField.Result <> "" Then
          ' If not Null or empty.
          lFormValue = fField.Result
      Else
          ' If null or empty, set to default value.
          fField.Result = iDefault
          lFormValue = iDefault
      End If
      ' See if a new new starting invoice number was entered.
      If lFormValue <> lRegValue Then
         ' If so, make the registery value equal the form value
         ' and store the new value.
         SaveSetting sAppName, sSection, sKey, lFormValue + 1
      End If
   errhandler:
      If Err <> 0 Then
         MsgBox Err.Description
      End If
   End Sub


For more information about adding a command to a menu, click Contents And Index on the Help menu, click the Index tab in Word Help, type the following text

   menus

and then double-click the selected text to go to the "Add a command or other item to a menu" topic. If you are unable to find the information you need, ask the Office Assistant.

For information about how to do this in earlier versions of Word, please see the following article(s) here in the Microsoft Knowledge Base:

   ARTICLE-ID: Q119990
   TITLE     : Using WordBasic to Add Sequential Number to New Form
               Document

For additional information, please see the following article in the Microsoft Knowledge Base:

   ARTICLE-ID: Q173707
   TITLE     : OFF97: How to Run Sample Code from Knowledge Base Articles

REFERENCES

For more information about getting help with Visual Basic for Applications, please see the following article in the Microsoft Knowledge Base:

   ARTICLE-ID: Q163435
   TITLE     : VBA: Programming Resources for Visual Basic for 
               Applications


Additional query words: vb vba vbe
Keywords : kbdta kbdtacode kbwordvba word8 word97 kbfaq kbprg
Version : 97
Platform : WINDOWS
Issue type : kbhowto


THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Last reviewed: March 19, 1998
© 1998 Microsoft Corporation. All rights reserved. Terms of Use.