我是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
答案 0 :(得分:3)
无需道歉,这种情况一直存在! :)
Option Explicit
未指定,并且OutputSheet
未定义。
这使OutputSheet
成为未声明的Variant/Empty
变量,您不能合法地对其进行成员调用,因为它不是对象,因此是“必需对象”。
在模块顶部指定了Option Explicit
时,该代码将无法编译:VBE会警告您未声明OutputSheet
。
为了使OutputSheet
存在,您需要在 Project Explorer (Ctrl + R)中找到该工作表,然后将其(Name)
属性(F4)更改为OutputSheet
。
或者,您可以声明一个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
是指什么,但是我无法测试您的整个代码。