Excel VBA-查找ColumnLetter-类型不匹配
目标是在整行中找到某个字符串(这始终是第1行)。标识包含字符串的单元格。查找此单元格的列字母(而不是列编号) 我有一个函数,可以从Stackoverflow上的另一个页面“窃取”的范围中获取列字母:Excel VBA-查找ColumnLetter-类型不匹配,excel,vba,Excel,Vba,目标是在整行中找到某个字符串(这始终是第1行)。标识包含字符串的单元格。查找此单元格的列字母(而不是列编号) 我有一个函数,可以从Stackoverflow上的另一个页面“窃取”的范围中获取列字母: Function FnColFromRange(rInput As Range) As String FnColFromRange = Split(rInput.Address, "$")(1) End Function 然后我有一个子系统将列字母存储到一个名为“colLetter”的字符
Function FnColFromRange(rInput As Range) As String
FnColFromRange = Split(rInput.Address, "$")(1)
End Function
然后我有一个子系统将列字母存储到一个名为“colLetter”的字符串中
但是它总是停留在“colleter”行上,说类型不匹配检查是否有从
.Find()
方法返回的实际范围。然后,正如@BruceWayne所评论的,可能错误在myStringCell.Address
:
Dim colLetter As String
With Workbooks("Wb.xlsx").Worksheets("Ws")
If Not .Rows(1).Find(myString) Is Nothing Then
Set myStringCell = .Rows(1).Find(myString)
colLetter = FnColFromRange(myStringCell)
Else
MsgBox "BOO!"
End If
End With
但是,类似这样的情况使函数变得不必要,因为myStringCell
有一个名为.Column
的属性,您可以引用它或使用1行程序代替函数:
Dim colLetter As String
With Workbooks("Wb.xlsx").Worksheets("Ws")
If Not .Rows(1).Find(myString) Is Nothing Then
Set myStringCell = .Rows(1).Find(myString)
colLetter = Split(myStringCell.Address, "$")(1)
Debug.Print myStringCell.Column 'if you can use the numeric column
Else
MsgBox "BOO!"
End If
End With
检查是否有从
.Find()
方法返回的实际范围。然后,正如@BruceWayne所评论的,可能错误在myStringCell.Address
:
Dim colLetter As String
With Workbooks("Wb.xlsx").Worksheets("Ws")
If Not .Rows(1).Find(myString) Is Nothing Then
Set myStringCell = .Rows(1).Find(myString)
colLetter = FnColFromRange(myStringCell)
Else
MsgBox "BOO!"
End If
End With
但是,类似这样的情况使函数变得不必要,因为myStringCell
有一个名为.Column
的属性,您可以引用它或使用1行程序代替函数:
Dim colLetter As String
With Workbooks("Wb.xlsx").Worksheets("Ws")
If Not .Rows(1).Find(myString) Is Nothing Then
Set myStringCell = .Rows(1).Find(myString)
colLetter = Split(myStringCell.Address, "$")(1)
Debug.Print myStringCell.Column 'if you can use the numeric column
Else
MsgBox "BOO!"
End If
End With
只需执行
colleter=FnColFromRange(myStringCell)
,因为您的函数需要一个范围
。我相信执行myStringCell.Address
会返回一个String
。您需要列字母做什么?Excel将只是将其转换回一个数字。。。不过,您可能会收到一个错误1004-您从未检查过是否从Find
@brucewayn获得了范围
,谢谢,布鲁斯,这很有效@不幸的是,我的excel电子表格中的许多公式都引用了公式中的列字母。我需要使用VBA检索列字母,然后将它们应用到Excel公式中…嗯?只需获取公式的适当范围,并使用其.Address
…只需执行colleter=FnColFromRange(myStringCell)
,因为您的函数需要一个范围。我相信执行myStringCell.Address
会返回一个String
。您需要列字母做什么?Excel将只是将其转换回一个数字。。。不过,您可能会收到一个错误1004-您从未检查过是否从Find
@brucewayn获得了范围
,谢谢,布鲁斯,这很有效@不幸的是,我的excel电子表格中的许多公式都引用了公式中的列字母。我需要使用VBA检索列字母,然后将它们应用到Excel公式中…嗯?只需为公式获取适当的范围,并将其地址
…LOL+1仅用于MsgBox
。LOL+1仅用于MsgBox
。