Microsoft KB Archive/212686

From BetaArchive Wiki

Article ID: 212686

Article Last Modified on 10/11/2006



APPLIES TO

  • Microsoft Word 2000 Standard Edition



This article was previously published under Q212686


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. This includes, but is not limited to, the implied warranties of merchantability or fitness for a particular purpose. This article assumes that you are familiar with the programming language that is being demonstrated and with the tools that are used to create and to 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 requirements.
For more information about how to use the sample code in this article, click the article number below to view the article in the Microsoft Knowledge Base:

212536 OFF2000: How to Run Sample Code from Knowledge Base Articles


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 form field bookmark name is "Invoice_Number." If you want 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
      End
   End If

   ' 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 2000"
   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,
   ' "Invoice_Number", with the name of your form field.
   Set fField = ActiveDocument.FormFields("Invoice_Number")

   ' 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
                

Resetting the Invoice Number

To reset the invoice number, you can use the following sample Visual Basic for Applications macro. The macro detects whether 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 ResetInvoice_Number()

   ' If the active document does not contain
   ' a form field exit this routine.
   If ActiveDocument.FormFields.Count = 0 Then
      End
   End If

   ' 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 2000"
   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,
      ' "Invoice_Number", with the name of your form field.
      Set fField = ActiveDocument.FormFields("Invoice_Number")

      ' 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 registry 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 Microsoft Word Help on the Help menu, type add item to menu in the Office Assistant or the Answer Wizard, and then click Search to view the topics returned.


REFERENCES

For additional information about getting help with Visual Basic for Applications, click the article number below to view the article in the Microsoft Knowledge Base:

226118 OFF2000: Programming Resources for Visual Basic for Applications


212623 WD2000: Macro Programming Resources



Additional query words: vb vba vbe

Keywords: kbdtacode kbfaq kbhowto kbprogramming KB212686