尝试设置范围时,为什么会收到424 Object Required错误?

时间:2019-01-24 20:51:47

标签: excel vba

我是VBA的新手,对于任何特别是业余的错误,我们深表歉意。

我正在尝试对表单上的某些用户输入运行match函数(该变量在下面称为client),并使用match函数中的行存储与该行相关的用户输入。

我得到

  

424个必需对象

当我尝试运行代码时出错。我在下面的代码中插入了一个我认为错误所在的注释。

Private Sub OK_Test_Click()    
    Dim rng As Range
    Dim client As String

    client = LastNameSearch.Text

    Set rng = OutputSheet.Range("B2:B8") 'debugger brings me here, 
                                          tells me rng = Nothing

    rowLocation = Application.WorksheetFunction.Match(client, rng, 0)

    Cells(C, rowLocation) = CaseStatusBox.Text
    Cells(D, rowLocation) = StaffEntryBox.Text
    Cells(G, rowLocation) = Date 
End Sub

2 个答案:

答案 0 :(得分:3)

无需道歉,这种情况一直存在! :)

Option Explicit未指定,并且OutputSheet未定义。

这使OutputSheet成为未声明的Variant/Empty变量,您不能合法地对其进行成员调用,因为它不是对象,因此是“必需对象”。

在模块顶部指定了Option Explicit时,该代码将无法编译:VBE会警告您未声明OutputSheet

为了使OutputSheet存在,您需要在 Project Explorer (Ctrl + R)中找到该工作表,然后将其(Name)属性(F4)更改为OutputSheet

properties toolwindow

或者,您可以声明一个OutputSheet As Worksheet变量,并将其Set转换为有效的Worksheet对象引用-例如:

Dim OutputSheet As Worksheet
Set OutputSheet = ActiveWorkbook.Worksheets("OutputSheet")

假定工作表存在于ActiveWorkbook中,其“标签名”为OutputSheet;请注意,用户可以轻松更改此设置; (Name)属性对于用户来说很难更改,但是它要求工作表在编译时位于ThisWorkbook中。


请注意,过程底部附近的未限定Cells调用隐式地指代当前恰好是ActiveSheet的任何工作表-请考虑使用适当的Worksheet对象引用对其进行限定。如果您打算写OutputSheet,则意味着:

OutputSheet.Cells(C, rowLocation) = CaseStatusBox.Text
OutputSheet.Cells(D, rowLocation) = StaffEntryBox.Text
OutputSheet.Cells(G, rowLocation) = Date

答案 1 :(得分:0)

尝试使用Worksheets()函数。

 Set rng = Worksheets("OutputSheet").Range("B2:B8")
 Debug.Print (rng.Count) 'Returns 7

尽管我不确定LastNameSearch是指什么,但是我无法测试您的整个代码。