Renumbering Arrays in Code
Oct14
I’ve got this bit of code where I’m listing table fields that I’m going to eventually Join into a SELECT statement.
fields(1) = "xuid"
fields(1) = "base_product"
fields(2) = "BillOfLading"
fields(3) = "BillOfLadingDate"
fields(4) = "BuyerCustomId"
fields(5) = "BuyerLegalName"
fields(6) = "CarrierCustomId"
fields(7) = "DestinationCustomId DestCustID"
fields(8) = "DestinationJurisdiction DestJur"
fields(9) = "DivDestJurisdiction DivDest"
fields(10) = "GrossUnits Gross"
fields(11) = "NetUnits Net"
fields(12) = "OriginCustomId"
fields(13) = "OriginJurisdiction OriJur"
fields(14) = "OriginTerminalCode TermCode"
fields(15) = "SellerCustomId"
fields(16) = "SellerLegalName"
fields(17) = "BOLState"
As you can see, I needed to add a new field in position 1. Now I’m faced with renumbering the rest of the array. Terrible. So I wrote this:
Public Sub RenumberArray()
Dim doClip As MSForms.DataObject
Dim vaLines As Variant, vaLine As Variant, vaLineStart As Variant
Dim i As Long
Set doClip = New MSForms.DataObject
doClip.GetFromClipboard
vaLines = Split(doClip.GetText, vbNewLine)
For i = LBound(vaLines) To UBound(vaLines)
vaLine = Split(vaLines(i), ")", 2)
vaLineStart = Split(vaLine(0), "(")
vaLines(i) = vaLineStart(0) & "(" & i + 1 & ")" & vaLine(1)
Next i
doClip.SetText Join(vaLines, vbNewLine)
doClip.PutInClipboard
End Sub
Now I can copy the code, run this procedure, and paste the results.
fields(1) = "xuid"
fields(2) = "base_product"
fields(3) = "BillOfLading"
fields(4) = "BillOfLadingDate"
fields(5) = "BuyerCustomId"
fields(6) = "BuyerLegalName"
fields(7) = "CarrierCustomId"
fields(8) = "DestinationCustomId DestCustID"
fields(9) = "DestinationJurisdiction DestJur"
fields(10) = "DivDestJurisdiction DivDest"
fields(11) = "GrossUnits Gross"
fields(12) = "NetUnits Net"
fields(13) = "OriginCustomId"
fields(14) = "OriginJurisdiction OriJur"
fields(15) = "OriginTerminalCode TermCode"
fields(16) = "SellerCustomId"
fields(17) = "SellerLegalName"
fields(18) = "BOLState"
Ahhh. Satisfying. Here’s how the stuff inside the loop works.
vaLine = Split(vaLines(i), ")", 2)
This splits the line into:
| vaLine | |
| 0 | fields(17 |
| 1 | = “BOLState” |
vaLineStart = Split(vaLine(0), "(")
This results in:
| vaLineStart | |
| 0 | fields |
| 1 | 17 |
Then I just concatenate the relevant parts back together with a different number.
fields & ( & 18 & ) & = "BOLState"




