填充临时数组以避免在dynamicmultidimensional array上使用Preserve

作为VBA的初学者,我正在努力学习这个内容的大部分特别,所以请原谅我的灰尘。

我有一个子程序,我正在通过阅读文本文件中的行。 每行都用空格分隔,作为文本标识符。 我需要将每行分割为multidimensional array。

Sub ReadLines() Dim LineValues() As String Dim row As Long, col As Long Dim DataArray() As String Dim TempArray() As String Dim FileContent As String Dim FilePath As String FilePath = "c:\mytextfile.txt" row = 0 TextFile = FreeFile Open FilePath For Input As TextFile FileContent = Input(LOF(TextFile), TextFile) Close TextFile LineValues = Split(FileContent, vbCrLf) For X = LBound(LineValues) To UBound(LineValues) If Len(Trim(LineValues(X))) <> 0 Then DataArray = Split(LineValues(X), "'") col = UBound(DataArray) TempArray = DataArray ReDim DataArray(col, row) For i = LBound(TempArray) To UBound(TempArray) DataArray(i, row) = TempArray(i) Next i End If row = row + 1 Next X 

在使用ReDim Preserve解决多维问题之后,我find了一些代码。 (只能修改最后一个维度)根据用户input,我的文本文件中的multidimensional array将具有未知的列和行。

这段代码正确地执行了这个过程,但是不能正确地存储数组元素! 上面的意图是使用临时数组(TempArray),而我ReDim(和空)我感兴趣的数组(DataArray),然后将最初从DataArray中的元素复制到resize的维度。

然而,当逐步通过代码,我可以看到每一行被正确放置,但随后每行迭代删除,DataArray = Split(LineValues(X),“'”)

我基本上有一个matrix的大小由行的总数,但只有最后一行的列数(只有来自最后一行的值)作为一个结果。

我意识到为什么会发生这种情况,但这里有人可以提出一个解 作为初学者,这有点疯狂!

编辑,充分的问题描述

为了充分说明,这是一个子程序,我将通过包含不相关数据的文本文件来读取脚本的一部分。 这个文本文件看起来有点像这样(引用的模糊是故意的)

  '<irrelevant text I want to ignore until seeing pattern 'NumberOfVariables?'> ... ... NumberOfVariables? NUMBEROFVARIABLES 'for the end user, I need to be able to pull information from each of these fields assigned to a variable to create strings as headers as per a specific format 'note that variable and variable type Variable#1 VARIABLETYPE Location? LOCATION UNITS DESCRIPTION 'text for each field is enclosed as follows '' (code formatting on site prevents me doing this) Variable#2 VARIABLETYPE Location? LOCATION UNITS DESCRIPTION ... Variable#NUMBEROFVARIABLES ' from here there is a column of data that is assigned to each variable such that Variable#1Element1 Variable#2Element1 'etc until #NUMBEROFVARIABLES Variable#1Element2 Variable#2Element2 Variable#1Element3 Variable#2Element3 Variable#1FinalElement Variable#2FinalElement 

主要目标是使用原始文章中的脚本来获取这些字段在一个多维matrix,然后我可以使用一些条件语句来获取头string根据最终用户的需求。

从这里,我会find一种方法,使数据列与每个variables相匹配,以便可以自动化到Excel中。

更进一步的是某种MsgBox瓦特/下拉,将selectvariables复制,但这是在我的发展阶段的天空思考!

尝试这个。 我没有testing过它:

 Sub ReadLines() Const FilePath$ = "c:\mytextfile.txt" Dim iFile%, c&, i&, j&, k&, Content$, Lines, Temp, Data c = 499 Open FilePath For Input As #iFile Content = StrConv(InputB(LOF(iFile), iFile), vbUnicode) Close #iFile Lines = Split(Content, vbCrLf) ReDim Data(0 To UBound(Lines), 0 To c) For i = 0 To UBound(Lines) If Len(Trim$(Lines(i))) Then Temp = Split(Lines(i), "'") If k < UBound(Temp) Then k = UBound(Temp) If k > c Then c = k * 2 ReDim Preserve Data(0 To UBound(Lines), 0 To c) End If For j = 0 To UBound(Temp) Data(i, j) = Temp(j) Next End If Next ReDim Preserve Data(0 To UBound(Lines), 0 To k) End Sub 

我需要将每行分割为multidimensional array。

那么我不知道这是否是真实的,因为我不知道你最终在做什么与数据,但在任何情况下,一个超级简单的替代scheme是将.txt文件读入工作簿结构。

为此,请使用带有参数的Workbooks.OpenText方法: TextQualifier:=xlTextQualifierSingleQuote (根据您的使用情况,可能需要一些额外的可选参数)。

这应该打开正确分隔的文本文件到“字段”(工作表中的列)。

从那里,您可以将工作表的UsedRange.Value分配给一个variables数组。