excel vba:使用dynamic构build的string来定义数组数组(对于.TextToColumns)

编辑:标记的解决scheme是正确的。 我的问题是,我增加了我使用的.TextToColumnsFieldInfo参数中使用的值,而不是使用分割的绝对位置。例如: .TextToColumns而不是.TextToColumns

原版的:

我正在构build一个工具,将各种loggingtypes(即作为一列,多行)和拆分成列(取决于数据行中的某些值)。

数据可能如下所示:

 062017000JohnDoe 777E 

它可以被指定为(loggingtypes2字符; YYYY;三个零填充符;名称;填充空格; ID)

分隔符是根据loggingtypes(由用户定义)和子types(通常由数据中的前1或2个数字定义,取决于loggingtypes)预定义的。

我正在使用.TextToColumns函数如下所示:

 DataToParse.TextToColumns Destination:=DataToParse, DataType:=xlFixedWidth, _ FieldInfo:=FieldInfoString, TrailingMinusNumbers:=True 

在代码之前,我build立了string

 FieldInfoString = "Array(Array(0,1), Array(5,1), Array(12,1))" 

我使用串联构buildstring,为每个分隔符(循环遍历x的可变长度列表)添加“,Array(x,1)”。

'FieldInfoString'variables抛出一个错误。 FieldInfo参数应该是什么:

 FieldInfo:=Array(Array(0,1), Array(5,1), Array(12,1)) 

该string是为许多不同的文件typesdynamic创build的。 有没有办法使用这个string来定义在.TextToColumns中使用的数组?

我也尝试改变我的方法,并dynamic构build数组:

 Dim FieldInfoArray() ' Here there is code to define DelimitersToParse - which ends up being a 1 column by x rows ' group of numbers that will be the first value in the arrays > ie Array(___, 1) ReDim Preserve FieldInfoArray(DelimitersToParse.Rows.Count) 

第一项是(0,1)

 FieldInfoArray(0) = Array(0,1) i = 1 For Each ParsedDelimiter In DelimitersToParse.Cells FieldInfoArray(i) = Array(ParsedDelimiter.Value, 1) i = i + 1 Next ParsedDelimiter DataToParse.TextToColumns Destination:=DataToParse, DataType:=xlFixedWidth, _ FieldInfo:=FieldInfoArray, TrailingMinusNumbers:=True 

数组方法不会抛出错误,并且数据被分割,但不是由我定义的任何分隔符。 我不知道如何审计FieldInfoArray看看是怎么回事。

编辑:试图@jochen的答案,审计我的数组。 仍然有问题 – 77777应该被放置在一列,但被拆分为777 | 77

尝试第一个答案

完整编辑后评论/编辑:

你的build筑方法是没问题的。 你可以像上面那样使用variables来循环构build一个基于0的数组。

TextToColumns之前的行中inputstop来查看数组的值和结构。 使用一些testing值和一个简单的结构,它完美地与我合作:

 Sub test() Dim Arr() Dim v1 As Integer, v2 As Integer ReDim Arr(0 To 4) v1 = 2: v2 = 6 Arr(0) = Array(0, 2) Arr(1) = Array(v1, 1) Arr(2) = Array(v2, 2) Arr(3) = Array(9, 2) Arr(4) = Array(19, 2) Range("A2").TextToColumns Destination:=Range("A2"), DataType:=xlFixedWidth, _ FieldInfo:=Arr, _ TrailingMinusNumbers:=True End Sub 

编辑:

由于你仍然遇到问题(现在你的代码分裂,但我不明白),我给你另一个例子。

在我的示例表中,我在您提供的示例数据(062017000JohnDoe 777E)的结构中有一个名为Data with Data的Range。 我有另外一个带宽和types的Rangecalled Delimiters (我更喜欢在某些情况下使用Text,特别是如果我不想松开0和空格,我的分隔符matrix(5行,2列)看起来像:

 0 2 2 1 6 2 9 2 19 2 

然后我使用下面的单行代码将Data拆分成列:

  Range("Data").TextToColumns Destination:=Range("Data"), DataType:=xlFixedWidth, _ FieldInfo:=Range("Delimiters").Value2, _ TrailingMinusNumbers:=True