我正在为我的工作场所(即大型科学中心的Outreach部门)开发数据库。我们有很多学校违反了我们(非常具体)的合同,所以我们希望追踪并减少这些违规行为。我想要用户(进入一所新学校时)拉起用户表单,输入学校名称,然后单击搜索按钮以填充与他们输入的学校名称匹配的列表框。如果他们点击该列表中的一所学校,该表单将使用该名称作为学校名称。如果没有,它会提示他们输入一个新的学校名称。VBA Range.Find程序 - 找不到类型不匹配
我的代码现在很基本。我正在尝试使用FindNext过程来提取学校名称的所有实例,但我得到了类型不匹配错误(#13)和我目前使用的代码,并且找不到可能会出现的错误从。我已经检查过没有变量或Userform对象拼写错误。
我希望Find函数仅返回第一个单元格的Range,以便我可以根据需要将它转换为.Address或.Value。
Option Explicit
Private Sub cbtnSearchSchool_Click()
Dim lrow As Long
Dim schoolmatch As Range
'defines "lrow" as the last completely empty row in the table
lrow = Cells.find(What:="", _
After:=Range("A1"), _
LookIn:=xlValues, _
LookAt:=xlPart, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlNext, _
MatchCase:=False, _
SearchFormat:=False).Row
Range("A1").Activate
'defines "schoolmatch" variable as the first school in the list that
'matches what was entered in the text box.
Set schoolmatch = Range("SchoolName").find(What:=txtbSchoolName.Value, _
After:=ActiveCell, _
LookIn:=xlValues, _
LookAt:=xlPart, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlNext, _
MatchCase:=False, _
SearchFormat:=False)
'returns value of first found cell to check for accuracy
MsgBox schoolmatch.Value
This is a photo of the Userform if anybody would like to see it.
编辑:对不起,我其实尺寸schoolmatch的范围和原来只是改变它,而我是调试对象 - 我之前和改变之后得到了同样的错误。
它向我显示我得到的错误 - 这是Set schoolmatch = Range.Find
操作,但我无法弄清楚我会混淆数据类型的任何地方。我有一个SchoolName范围,我已经仔细检查过,并且检查了拼写错误的所有其他变量名称。
随着时间的推移,这个列表中会有成千上万的学校,所以这个搜索功能对于用户在表单上选择一所学校之前过滤一些结果是必要的。
lRow被定义为“Long”,但您试图将其设置为等于“Range”对象。 – braX
@braX如何和在哪里? – sktneer
@braX你的陈述是错误的,因为'range'末尾有'.Row',这使得它是数字而不是范围,谁应该低估自己的投票权 – Ibo