在Excel文件中搜索特定的列标题-运行时错误91

时间:2019-06-16 17:46:36

标签: excel vba

我正在尝试编写一些excel vba代码来处理某些数据列的内容。鉴于工作表具有一定程度的动态变化(不时添加和删除列),我希望我的代码通过其标题名称“查找”特定的列,并最终返回列号。我的文件大约有50列。

问题是这样的:我的代码可以很好地找到许多我感兴趣的列(标题),我有兴趣返回列索引,但是“显然存在”的某些列将返回Nothing,并因此引发运行时91错误。

毫无疑问,我可以肯定地说,当我执行.find时,确实存在列(如Comments列)。我可以将发生故障的hdr搜索列随机更改为其他标头名称,将其传递给代码中的函数,发现某些列就很好了,而另一些则导致运行时错误。我检查了“失败”标头中的特殊字符,空格,LF等。没有运气。甚至尝试使用FindColHdrNum函数对4行进行重新排序。再次,没有运气。

希望新鲜的眼睛可以提供答案。下面是简化的代码,该代码由主要excel工作表上的按钮触发。我没有在VBA中使用过多函数,即使该函数未生成运行时错误,它也没有返回列值,但这是我遇到的第二个问题,一旦我发现查找代码没有崩溃(返回0)。

Sub Button119_Click()

Dim L4RankCol As Integer
Dim DecomDriverCol As Integer
Dim SupTermImpactYrCol As Integer
Dim Comments As Integer
Dim L3RankCol As Integer

    L4RankCol = FindColHdrNum("L4 Rank")   '<-- This works
    DecomDriverCol = FindColHdrNum("Decom Driver") '<-- This works
    SupTermImpactYrCol = FindColHdrNum("Support Termination Impact Yr")  '<-- This works
    Comments = FindColHdrNum("Comments")  '<-- This does not work

End Sub

Function FindColHdrNum(strHdr As String) As Integer

     Dim rngAddress As Range
     Set rngAddress = Range("Headers").Find(strHdr)
     FindColumnHdrNum = rngAddress.Column  '<--runtime error is caused by Nothing returned

End Function

2 个答案:

答案 0 :(得分:1)

问题原来是嵌入在标题中的伪换行。当我不断重新键入它时,这很奇怪,但是,当然,我总是从“ comment”标头的“第一个字母”开始,而实际上,字符早于此。感谢所有人的帮助!

答案 1 :(得分:0)

函数的名称是FindColHdrNum,但是您将其写到了函数中:

FindColumnHdrNum = rngAddress.Column

代替:

FindColHdrNum = rngAddress.Column