场景:我有一个鼠标指针代码,点击某个屏幕坐标,复制,然后点击另一个坐标并粘贴。我复制的数据可能会发生变化,有些列的信息会有问题。
问题:有些列的数据包括" 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
答案 0 :(得分:2)
Columns
集合可以使用文本索引进行索引,例如Columns("D")
或数字索引,例如Columns(4)
。
因此,您的代码中不需要Col_Letter
函数,只需使用
ThisWorkbook.Sheets("Output").Columns(CLng(ColTXTArray(i))).NumberFormat = "@"
(CLng
正在将您的String
值转换为"4"
,例如Long
。)