是否可以创建一个大小基于文件中行数的数组?

时间:2015-01-06 11:40:12

标签: arrays vba

我有一个VBA脚本,它读取文本文件,然后创建一个内容数组。

目前我必须指定数组的大小。有没有办法让数组的大小取决于文本文件中的行数?

Sub WriteToArray()

Const strFileName As String = "C:\Users\km933\Documents\Excel Macro\Keyword_File.txt"
Dim PR(1 To 20)
Dim intFileNum As Integer
Dim intCount As Integer
Dim strRecordData

intFileNum = FreeFile
intCount = 1
Open strFileName For Input As #intFileNum
Do Until EOF(intFileNum) Or intCount > 20
    Input #intFileNum, strRecordData
    PR(intCount) = strRecordData
    intCount = intCount + 1
Loop

MsgBox PR(1)

Close #intFileNum

End Sub

2 个答案:

答案 0 :(得分:0)

您可以使用ReDim动态更改数组的大小。如果要保留已添加的条目,可以使用ReDim Preserve。

Sub WriteToArray()

    Const strFileName As String = "C:\Users\km933\Documents\Excel Macro\Keyword_File.txt"
    Dim PR() As String
    Dim intFileNum As Integer
    Dim strRecordData As String

    intFileNum = FreeFile

    Open strFileName For Input As #intFileNum

    ReDim PR(0)

    Do Until EOF(intFileNum) Or intCount > 20
        Input #intFileNum, strRecordData

        ReDim Preserve PR(UBound(PR) + 1)
        PR(UBound(PR)) = strRecordData
    Loop

    MsgBox PR(1)

    Close #intFileNum

End Sub

唯一的问题是在那个例子中没有使用PR(0)......但是通过一点额外的努力,这也是可能的。这个例子只是简化为基本概念。

当然,您应该将变量定义为变体!

答案 1 :(得分:0)

你可以简单地阅读所有内容,然后分成一遍:

dim PR() as String

open "C:\Users\km933\Documents\Excel Macro\Keyword_File.txt" for Input as #1
    PR = Split(Input$(LOF(1), #1), vbCrLf)
close #1

for i = 0 To ubound(PR)
    debug.? i, PR(i)
next