![]() |
#1
|
|||
|
|||
![]() Entering "data sets" into my document I need to ID them: I want this ID to be incremented "MaximumExistingID + 1" every time I insert a new data set. The key is that I do not want already inserted ID's to change (e.g. if I insert a new ID in the very beginning of the document). All fields and settings I have tried, keep changing the numbers, incrementing them from the beginning to the end of the document. Any hint is welcome. Thanks! |
#2
|
|||
|
|||
![]()
This cannot be done with a field, automatic numbering is sequential by design; vba would be required.
In Excel I accomplished this by a cell at the bottom of the column that has the ID numbers which says MAX of the column +1. I then use a macro to insert a new row above the current one and put the value found in the bookmark for the formula in the ID column for the new row. Here is the vba code to assign the new number to column Q of the new row: Code:
' Insert new row above selection ' Dim lRow As Long lRow = Selection.Row Selection.EntireRow.Insert ' ' Assign Case Number ' Dim lNext As Long lNext = Range("Next_Number").Value Cells(lRow, "Q").Value = lNext I prefer using Excel for data rather than Word and wouldn't know how to get the MAX function to work in Word. I'm sure that something could be done using vba. |
#3
|
|||
|
|||
![]()
Charles:
thanks for the feedback. Any suggestion what the VBA-code could look like in Word? Thanks, Fred |
#4
|
||||
|
||||
![]()
For this to work in Word, you'd need to store the last-used number in a document property or variable for retrieval. The code to do this might look like:
Code:
Sub InsertNextID() Dim ID As Long, i As Long, bFnd As Boolean Const strID As String = "MaxID" bFnd = False On Error Resume Next With ActiveDocument For i = 1 To .Variables.Count If .Variables(i).Name = strID Then bFnd = True ID = .Variables(strID).Value + 1 Variables(strID).Value = ID Exit For End If Next If bFnd = False Then ID = InputBox(Prompt:="Please input the First ID #", _ Title:="ID Creation", Default:=1) .Variables.Add Name:=strID, Value:=ID End If Selection.Text = ID End With ErrExit: End Sub Code:
Sub IDReset() Dim ID As Long, i As Long Const strID As String = "MaxID" On Error Resume Next With ActiveDocument For i = 1 To .Variables.Count If .Variables(i).Name = strID Then ID = .Variables(strID).Value ID = InputBox(Prompt:="Please input the Reset ID #," & vbCr & _ "equal to the last valid ID #", Title:="ID Creation", Default:=ID) Variables(strID).Value = ID Exit For End If Next End With End Sub
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
#5
|
|||
|
|||
![]()
Hi Paul,
thank you for your code. It looks very good and has similarities to the way I have finally chosen (we worked in parallel): My data are identified by a prefix "D#", so - in a first loop I determine the maximum ID that is available in the document, - then those data that do not yet have an ID are assigned with one in Loop 2 Thanks for the feedback, Fred Here my approach: Code:
Sub AddDataID() NumberOfData = 0 DataMaxID = 0 AllDataHaveID = True With Selection 'Look for D# in the document and determine the maximum ID that was already assigned .HomeKey Unit:=wdStory With .Find .Text = "D#??????" .Forward = True .MatchWildcards = True End With Do While .Find.Execute 'Loop 1: Determine the maximum ID NumberOfData = NumberOfData + 1 FirstSpace = InStr(1, Selection, " ") 'Per definition there is a " " after the ID DataNumberFound = Val(Mid(Selection, 3, FirstSpace - 3)) If DataNumberFound = 0 Then AllDataHaveID = False 'Not all requirements have an ID yet If DataNumberFound > DataMaxID Then DataMaxID = DataNumberFound Loop End With 'Then loop 2 to assign those data that do not have an ID yet an ID starting from DataMaxID End Sub |
#6
|
||||
|
||||
![]()
Your initial post described IDs being incremented every time you insert a new data set, but without regard to any existing sequencing. That's what the code I supplied provides for.
Your code, however, envisages searching through the document for all existing IDs (which could be a slow process in a long document) to find the highest one (which might not be the last one allocated if that one has since been deleted), then (apparently) you intend to sequentially add successive IDs to data presently lacking them. The two approaches are quite different and yours doesn't really meet your "every time I insert a new data set" criterion. ![]()
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
![]() |
|
![]() |
||||
Thread | Thread Starter | Forum | Replies | Last Post |
![]() |
jrt | Excel Programming | 1 | 04-16-2015 01:46 PM |
Increment Numbers | Darbsp | Word | 3 | 03-10-2015 05:25 AM |
![]() |
spthomas | Word | 12 | 12-16-2013 05:23 PM |
![]() |
SASE1984 | Word | 1 | 02-10-2012 01:06 PM |
Increment Numbers Help | Jazz43 | Word | 2 | 07-30-2010 02:48 AM |