循环通过字符串数组项错误

时间:2017-04-27 09:17:19

标签: arrays excel vba excel-vba

场景:我有一个鼠标指针代码,点击某个屏幕坐标,复制,然后点击另一个坐标并粘贴。我复制的数据可能会发生变化,有些列的信息会有问题。

问题:有些列的数据包括" 17-2"或" 13.5"。因此,对于这些列,在复制粘贴过程完成之前,我将excel文件中的列更改为txt,其中包含:

ThisWorkbook.Sheets("Output").Columns("E").NumberFormat = "@"

这些有问题的列可以改变位置(例如," E"或" J",或者甚至根本不存在)。

目标:我正在尝试更改我的代码,因此我收到的用户输入必须更改为文本的列号。

我到目前为止的地方:假设我使用的是MSGBox来获取用户输入(以" 2/4/5/9"的形式,作为串)。我首先将它拆分成一个数组,而不是我试图遍历这个数组。对于数组中的每个数字,我使用ColumnLetter函数,它给我所需的字母,然后我将该列更改为文本。

问题:现在(在检查了很多关于如何正确循环字符串数组的帖子之后,在SO中)我得到了这段代码:

Dim ColTXT As String
Dim ColTXTArray() As String
Dim i As Long

On Error GoTo ErrorHandler

ColTXT = Application.InputBox("Please enter ascending column numbers to be 
changed to text (separated by '/', no blanks)", "Please enter Column 
Numbers")

ColTXTArray() = Split(ColTXT, "/")

For i = LBound(ColTXTArray) To UBound(ColTXTArray)
    'ColTXTArray (i)

ThisWorkbook.Sheets("Output").Columns(Col_Letter(ColTXTArray(i)))_
.NumberFormat = "@"

Next i

但我无法执行此过程,循环遍历数组中的每个项目。

问题:最好的方法是什么?

Obs:在我上一次运行中,我遇到了一个错误(ByRef参数类型不匹配):

ThisWorkbook.Sheets("Output").Columns(Col_Letter(ColTXTArray(i)))_
.NumberFormat = "@"

Obs2:这是我根据数字查找专栏字母的功能:

Function Col_Letter(lngCol As Long) As String
Dim vArr
vArr = Split(Worksheets("Output").Cells(1, lngCol).Address(True, False), 
"$")
Col_Letter = vArr(0)
End Function

1 个答案:

答案 0 :(得分:2)

Columns集合可以使用文本索引进行索引,例如Columns("D")或数字索引,例如Columns(4)

因此,您的代码中不需要Col_Letter函数,只需使用

引用列即可
ThisWorkbook.Sheets("Output").Columns(CLng(ColTXTArray(i))).NumberFormat = "@"

CLng正在将您的String值转换为"4",例如Long。)