excel - vba 简单范围/对象错误

标签 excel vba object range

所以我以为我对 VBA 有很好的掌握,但现在这个错误真的让我很烦恼,我无法弄清楚问题所在。
这是一个非常短的子程序(从模块运行):

Sub test()
    Dim lr
    lr = Sheets(1).Range("a1", Cells(65, 1))
    MsgBox lr.Address
End Sub

无论出于何种原因,这都会引发“应用程序定义/对象定义错误”

谁能解释一下?

编辑:
这也会引发同样的错误:
MsgBox Sheets(1).Range("a1", Cells(65, 1)).Address

编辑2:
我将稍微改变我的问题,因为我对对象的了解,但我用“查找”方法来使用它。
所以这里是代码:
Set lookrange = Sheets(1).Range(Cells(2, 1), Cells(200, 1))
Set result = lookrange.Find(what:=searchTerm, lookat:=xlWhole)

在这种情况下,它告诉我lookrange 引起了问题。

最佳答案

好的。你有几个问题。

Option Explicit
sub test()
    Dim lr as Range
    set lr = Sheets(1).Range("a1", Cells(65, 1))
    MsgBox lr.Address
End Sub

首先,作为 VBA 新手,请使用 Option Explicit几乎总是在模块的顶部,因此您需要确定变量的尺寸。

第二,你从来不声明lr作为对象类型 - 确保将其声明为类型 Range - 您不一定必须这样做,但是,这是一种很好的做法。

三、需要使用set正如其他人在分配对象时指出的那样,例如 Range值,否则您将始终收到该错误。

到你问题的第二部分。
MsgBox Sheets(1).Range("a1", Cells(65, 1)).Address

将此更改为
With Sheets(1)
    MsgBox .Range(.Range("A1"), .Cells(65, 1)).Address
End With

如果您曾经从不同于 Sheet1 的工作表运行它你会得到错误,因为 Cells(65,1)引用不会出现在 Sheet1 - Excel 会认为您的意思是当前工作表。

第三部分
Set lookrange = Sheets(1).Range(Cells(2, 1), Cells(200, 1))
Set result = lookrange.Find(what:=searchTerm, lookat:=xlWhole)

与第二部分有相同的问题。另请注意,如果 result,您完全有可能会运行错误。如果 Find 找不到,上面的第二个语句(Find 的结果)将导致错误不成功。

关于excel - vba 简单范围/对象错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12711519/

相关文章:

vba - Excel range.Rows 属性的真正作用是什么?

excel - 在邮件正文中插入文本、超链接和表格

javascript - JavaScript 中的对象比较

vba - Excel VBA 函数仅在更改时更新

excel - IF(ISERROR(...)) 的较短版本

excel - VBA - 删除空行直到有数据

Excel - VBA : How do I replace the last 3 characters if they are "..."

excel - 如何使 Excel 将前导单引号解释为常规字符?

arrays - 使用 lodash 将对象数组转换为数组对象

javascript - 如何访问不同对象的属性?