首页 > 解决方案 > 在 Excel 文件中搜索特定列标题 - 运行时错误 91

问题描述

我正在尝试编写一些 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

标签: excelvba

解决方案


问题原来是嵌入在标题中的虚假换行。这很奇怪,因为我不断地重新输入它,但当然,我总是从“评论”标题的“第一个字母”开始,而事实上,这个字符在它之前。感谢大家的帮助!


推荐阅读