Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA-查找ColumnLetter-类型不匹配_Excel_Vba - Fatal编程技术网

Excel VBA-查找ColumnLetter-类型不匹配

Excel VBA-查找ColumnLetter-类型不匹配,excel,vba,Excel,Vba,目标是在整行中找到某个字符串(这始终是第1行)。标识包含字符串的单元格。查找此单元格的列字母(而不是列编号) 我有一个函数,可以从Stackoverflow上的另一个页面“窃取”的范围中获取列字母: Function FnColFromRange(rInput As Range) As String FnColFromRange = Split(rInput.Address, "$")(1) End Function 然后我有一个子系统将列字母存储到一个名为“colLetter”的字符

目标是在整行中找到某个字符串(这始终是第1行)。标识包含字符串的单元格。查找此单元格的列字母(而不是列编号)

我有一个函数,可以从Stackoverflow上的另一个页面“窃取”的范围中获取列字母:

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