I have a piece of code I am using to important data from a text file. The code works fine but I am having a hard time understanding how defining a Variable "As New Collection" works. I have tried to research on numerous websites dedicated to excel but had no luck finding any further information.
I have executed the code line-by-line over-and-over and believe what the "new collection" does is it creates some type of external database that is hidden within excel (that's just my guess). If someone can explain how this works or point me to a website with more information, I would really appreciate it. I have attached a sample file and a text file with dummy data if needed to see how the code is working. Thanks.
Sub TradeAnalysis()
' imports text file
' shortcut key = control + j
Dim i As Long
Dim j As Long
Dim n As Long
Dim LastRow As Long
Dim Prompt As String
Dim Path As String
Dim AccountNumbers As New Collection
Dim FieldOrder As New Collection
Dim WkbData As Workbook
FieldOrder.Add "A"
FieldOrder.Add "B"
FieldOrder.Add "J"
FieldOrder.Add "AQ"
FieldOrder.Add "AM"
FieldOrder.Add "AF"
FieldOrder.Add "AR"
FieldOrder.Add "AP"
FieldOrder.Add "AD"
FieldOrder.Add "T"
FieldOrder.Add "X"
FieldOrder.Add "L"
FieldOrder.Add "K"
FieldOrder.Add "AN"
FieldOrder.Add "P"
FieldOrder.Add "C"
FieldOrder.Add "O"
FieldOrder.Add "AE"
FieldOrder.Add "G"
FieldOrder.Add "AG"
FieldOrder.Add "AH"
FieldOrder.Add "AI"
FieldOrder.Add "I"
FieldOrder.Add "Q"
FieldOrder.Add "AK"
FieldOrder.Add "V"
FieldOrder.Add "Z"
FieldOrder.Add "AB"
FieldOrder.Add "D"
FieldOrder.Add "E"
FieldOrder.Add "AO"
FieldOrder.Add "F"
FieldOrder.Add "AU"
FieldOrder.Add "AV"
FieldOrder.Add "AS"
FieldOrder.Add "AT"
FieldOrder.Add "AJ"
FieldOrder.Add "AL"
FieldOrder.Add "M"
FieldOrder.Add "N"
FieldOrder.Add "R"
FieldOrder.Add "S"
FieldOrder.Add "Y"
FieldOrder.Add "AA"
FieldOrder.Add "U"
FieldOrder.Add "W"
FieldOrder.Add "AC"
n = FieldOrder.Count
Prompt = "Select the text file to process."
Path = Application.GetOpenFilename("Text Files (*.txt), *.txt", , Prompt)
If Path = "False" Then
GoTo ExitSub:
End If
Application.DisplayAlerts = False
Application.EnableEvents = False
Application.ScreenUpdating = False
Workbooks.OpenText Filename:=Path, Origin:=2, StartRow:=1, DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False, _
Comma:=False, Space:=False, Other:=True, OtherChar:="|" ', TrailingMinusNumbers:=True
Set WkbData = ActiveWorkbook
With wsTradeTable
.Range(.Cells(2, 1), .Cells(.Rows.Count, .Columns.Count)).ClearContents
LastRow = Range("A" & .Rows.Count).End(xlUp).Row
For i = 2 To LastRow
Application.StatusBar = "Importing Data: " & i & " of " & LastRow
For j = 1 To n
.Cells(i, j).Value = Range(FieldOrder(j) & i).Value
Next j
If Application.WorksheetFunction.CountIf(.Range("B2:B" & i), "=" & .Range("B" & i).Value) = 1 Then
AccountNumbers.Add (.Range("B" & i).Value)
End If
Next i
WkbData.Close SaveChanges:=False
n = AccountNumbers.Count
wsAnalysis.Activate
Range(Cells(2, 1), Cells(Rows.Count, Columns.Count)).ClearContents
For i = 1 To n
Application.StatusBar = "Processing Data: " & i & " of " & n
Range("A" & i + 1).Value = AccountNumbers(i)
Next i
End With
ExitSub:
Application.DisplayAlerts = True
Application.EnableEvents = True
Application.ScreenUpdating = True
Application.StatusBar = False
Set WkbData = Nothing
End Sub
Bookmarks