Arrays 循环字符串数组项错误

Arrays 循环字符串数组项错误,arrays,vba,excel,Arrays,Vba,Excel,场景:我有一个鼠标指针代码,它单击某个屏幕坐标,复制,然后单击另一个坐标并粘贴。正在复制的数据可能会更改,并且某些列的信息有问题 问题:某些列包含“17-2”或“13.5”等数据。因此,对于这些列,在复制粘贴过程完成之前,我将excel文件中的列更改为txt,其中包括: ThisWorkbook.Sheets("Output").Columns("E").NumberFormat = "@" 这些有问题的列可以改变位置(例如“E”或“J”),甚至根本不存在 目标:我正在尝试修改代码,所以我得到

场景:我有一个鼠标指针代码,它单击某个屏幕坐标,复制,然后单击另一个坐标并粘贴。正在复制的数据可能会更改,并且某些列的信息有问题

问题:某些列包含“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参数类型不匹配):

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

可以使用文本索引(例如
列(“D”)
)或数字索引(例如
列(4)
)对
集合编制索引

因此,代码中不需要有
Col_Letter
函数,您可以使用

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

CLng
正在将
字符串
值(例如
“4”
)转换为
,例如
4

可以使用文本索引(例如
列(“D”)
)或数字索引(例如
列(4)
)对
集合进行索引

因此,代码中不需要有
Col_Letter
函数,您可以使用

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

(CLng
CLng
正在将您的
String
值(例如
“4”
)转换为
Long
,例如
4

您的
Col_Letter
函数在声明
coltxtary
为字符串的很长一段时间之外。@SJR更改了它,现在我得到了一个对象类型错误。^^另外,您为什么要执行
列(Col_-Letter(coltxtary(i))
?为什么不直接做
.Columns(CLng(coltxtary(i)))
?将一个数字转换为一个字符似乎很奇怪,这样Excel就可以查找其映射表,再次将其转换回一个数字。@DGMS89-当您说您更改了它时,您的意思是您更改了
.Columns(colu-Letter(coltxtary(i)))
.Columns(Col_-Letter(CLng(ColTXTArray(i)))
(这可能会起作用)或者您是否将
lngCol更改为
lngCol作为字符串(除非您也将
.Cells(1,lngCol)
。Cells(1,CLng(lngCol))
)@YowE3K为什么,你问?因为我很笨,哈哈。这很好用(你的第一个评论),我不知道它是怎么工作的。你想把它写下来作为一个答案吗?你的
colu字母
函数很长一段时间都没有声明
coltxtary
为字符串。@SJR更改了它,现在我得到了一个对象类型错误。^^^还有你为什么要这样做
(Col_-Letter(coltxtary(i))
?为什么不直接做
.Columns(CLng(coltxtary(i)))
?将一个数字转换为一个字符似乎很奇怪,这样Excel就可以查找其映射表,再次将其转换回一个数字。@DGMS89-当您说您更改了它时,您的意思是您更改了
.Columns(colu-Letter(coltxtary(i)))
.Columns(Col_-Letter(CLng(ColTXTArray(i)))
(这可能会起作用)或者您是否将
lngCol更改为
lngCol作为字符串(除非您也将
.Cells(1,lngCol)
。Cells(1,CLng(lngCol))
)@为什么,你问?因为我很笨,哈哈。这很好用(你的第一个评论),我不知道它是如何工作的。你愿意把它写下来作为答案吗?