在Excel的另一个工作表中使用Range.Find For单元格

在Excel的另一个工作表中使用Range.Find For单元格,excel,vba,find,range,Excel,Vba,Find,Range,我正在尝试使用range.Find在另一个工作表中查找单元格,该工作表包含上一个工作表中的字符串输入。我正在搜索表中的列标题,这样,如果列发生移位,我就不必更新宏。我正在使用下面的函数,但我总是得到一个错误,说需要一个对象。我看过类似的话题,也尝试过他们的方法,但对他们有用的东西对我来说并不管用。如何使用Range.Find在不同的工作表中查找列标题所在的单元格?以下是我使用的代码: Function FindColumn(ByVal name as String) As Range '

我正在尝试使用range.Find在另一个工作表中查找单元格,该工作表包含上一个工作表中的字符串输入。我正在搜索表中的列标题,这样,如果列发生移位,我就不必更新宏。我正在使用下面的函数,但我总是得到一个错误,说需要一个对象。我看过类似的话题,也尝试过他们的方法,但对他们有用的东西对我来说并不管用。如何使用Range.Find在不同的工作表中查找列标题所在的单元格?以下是我使用的代码:

Function FindColumn(ByVal name as String) As Range
    'cds is the other worksheet I need to find the column header in
    Set FindColumn = cds.Range("A1:AA1").Find(name) 
    If FindColumn Is Nothing Then MsgBox(name & " Not Found!")
    Exit Function
End Function
在您的代码中,CD看起来什么都不是,这可能导致该错误。CD是否在代码中的其他位置分配了工作表对象?如果是,变量的作用域是什么?如果它不是模块或公共的,那么这就可以解释它了

如果是module/public,请确保在调用函数之前分配了变量cds

如果是过程级变量,则需要将其传递给函数,如:

FindColumn "columnname", cds
并修改函数以接受此附加参数:

Function FindColumn(byVal name as String, cds as Worksheet)

哦,哇。。。我已经用C++编程了很多年…在范围问题上被难住有点痛。不过,它现在运行得很好。非常感谢!别担心!有时候,你只需要用另一双眼睛来注意应该很明显的事情:我认为最大的问题是,我得到的错误不是一个未定义的变量错误,而是一个需要对象的错误。但是,嘿,至少它起作用了!:除非在每个模块的顶部使用optionexplicit,否则您不会得到未定义的错误,顺便说一句,您应该这样做!。除非您这样做,否则VBA允许隐式变量声明,未声明的变量将是Variant类型-如果不进行测试,我很确定这会引发“对象要求”错误,或者是因为您试图将FindColumn分配给对象变量,而FindColumn是一个范围对象,而不是一个对象,或者尝试访问非对象类型的变量的属性/方法cds.Range。