我实际上需要做的:将文本文件读入VBA,并使文件的每一行成为类模块的单独实例
我的文本文件中有数据
2018-08-10 12:00:00 | B | 34328 | SPY | ARCA || 100 | 200.4
2018-08-10 13:43:00 | B | 343 | SPY | ARCA || 100 | 200.8
2018-08-10 13:50:00 | S | 2809 | SPY || 100 | 201.2
2018-08-10 13:55:00 | B | 34878 | SPY || 100 | 200.9
我正在做VBA练习。我需要将该文件读入一个类模块,以便该模块的每个实例都是文件的一行。最终,我将不得不对包含的数字进行分析。
我的准则是: -该文件只需要读取一次 -代码必须是纯vba-我不必修改现有的电子表格
到目前为止,我已经尝试过:
-创建类模块
' Class Module: Trade
Public Fill As String
---在其他模块中
Public myFile As String
Sub defineVar()
myFile = Range("$A$2")
End Sub
Sub readFills()
Call defineVar
Dim dict
Set dict = CreateObject("Scripting.Dictionary")
Dim fill_ID As Long
fill_ID = 0
Open myFile For Input As #1
Do Until EOF(1)
Line Input #1, fileLine
dict.Add Key:=fill_ID, Item:=fileLine
Dim name As New trade
name.Fill = dict(fill_ID)
fill_ID = fill_ID + 1
Debug.Print name.Fill
Loop
Close #1
End Sub
这可以读取文件的每一行,但是我只有一个实例(文件的最后一行),尽管我有完整的字典。是否可以动态创建类模块的“实例”?我会以错误的方式处理吗?
答案 0 :(得分:0)
Do Until EOF(1)
Line Input #1, fileLine
dict.Add Key:=fill_ID, Item:=fileLine
Dim name As New trade
name.Fill = dict(fill_ID)
fill_ID = fill_ID + 1
Debug.Print name.Fill
Loop
Close #1
在上面的代码中,好像您的“交易”对象在循环的每次迭代中都被覆盖(这就是为什么您仅看到文件的最后一行的原因)。
如果您希望文件的所有行都作为“交易”类型的对象的集合,则应将其添加到容器中。我经常为此使用收藏,例如:
dim trades as New Collection
然后在循环中简单地编写
trades.add name 'this creates a collection of trade objects from each line from the file
如果您将贸易对象名称添加到也是集合的字典中,则可以执行类似的操作
答案 1 :(得分:0)
您需要对代码进行几处更改。首先,在循环外声明您的类变量。其次,在循环内创建一个新实例。第三,将该实例添加到集合中。例如,
Dim name As Trade
Dim names As Collection
Set names = New Collection
Open myFile For Input As #1
Do Until EOF(1)
Line Input #1, fileLine
dict.Add Key:=fill_ID, item:=fileLine
Set name = New Trade
name.Fill = dict(fill_ID)
names.Add name
fill_ID = fill_ID + 1
Debug.Print name.Fill
Loop
Close #1