excel - 运行时错误 91 - 在用户窗体中测试代码时
问题描述
Office 360、64 位、Excel。子程序Private Sub Card_FindCardNumber_AfterUpdate()
是textbox (Card_FindCardNumber)
在我输入要查询的数字后,代码应该查看它是否存在。
在测试代码时,不管它是一个存在还是不存在的数字,我都会收到相同的错误消息"Runtime Error 91", Object Variable or With Block variable not set
。
我是 VBA 的业余爱好者,无法弄清楚为什么特定代码行存在问题。
我已经改编了来自 YouTube 和他的网站的 Trevor Easton(在线 PC 学习)“带有 Userform Vlookup 的 Excel VBA ”的代码:
这Ws01
实际上是代表 cnVisitorCard_Database 工作表的电子表格的代码名称。
Vlookup指的是命名范围:“LookupCardNo”,它具有覆盖9列数据的偏移功能(从AC列(Card#)到名称范围AK的最后一列)
Private Sub Card_FindCardNumber_AfterUpdate()
'Define the Variables
Dim ws01 As Worksheet
Dim cnVisitorCard_Database As Worksheet
Set ws01 = cnVisitorCard_Database
'Check to see if value exists
If WorksheetFunction.CountIf(ws01.Range("AC:AC"), Me.Card_FindCardNumber.Value) = 0 Then
MsgBox "This is an incorrect ID"
Me.Card_FindCardNumber.Value = ""
Exit Sub
End If
'Lookup values based on first control
With Me
.Card_ExpiryDate = Application.WorksheetFunction.VLookup(CLng(Me.Card_FindCardNumber), ws01.Range("LookupCardNo"), 2, 0)
.Card_Status = Application.WorksheetFunction.VLookup(CLng(Me.Card_FindCardNumber), ws01.Range("LookupCardNo"), 3, 0)
.Card_ReturnDate = Application.WorksheetFunction.VLookup(CLng(Me.Card_FindCardNumber), ws01.Range("LookupCardNo"), 4, 0)
.Card_Description = Application.WorksheetFunction.VLookup(CLng(Me.Card_FindCardNumber), ws01.Range("LookupCardNo"), 5, 0)
.Card_TypeCode_Hidden = Application.WorksheetFunction.VLookup(CLng(Me.Card_FindCardNumber), ws01.Range("LookupCardNo"), 6, 0)
.Card_ValidNo_ofDays_Hidden = Application.WorksheetFunction.VLookup(CLng(Me.Card_FindCardNumber), ws01.Range("LookupCardNo"), 7, 0)
.Card_UpdatedInHW = Application.WorksheetFunction.VLookup(CLng(Me.Card_FindCardNumber), ws01.Range("LookupCardNo"), 8, 0)
.Card_UpdatedInFF = Application.WorksheetFunction.VLookup(CLng(Me.Card_FindCardNumber), ws01.Range("LookupCardNo"), 9, 0)
End With
End Sub
我在该行收到错误 91:
If WorksheetFunction.CountIf(ws01.Range("AC:AC"),
Me.Card_FindCardNumber.Value) = 0 Then
如果数字存在,我当然希望它将值返回到用户窗体上的文本框中,但如果它不存在,那么我希望它会弹出一条消息告诉我数字不不存在。
如果有任何帮助,我将不胜感激 :) 当然,一旦解决此问题,我不知道是否还会出现其他错误。
解决方案
如果您已经有一个带有代号的工作表,cnVisitorCard_Database
则此变量声明将“隐藏”该工作表:
Dim cnVisitorCard_Database As Worksheet
所以你的局部变量的值为Nothing
. 所以当你这样做时:
Set ws01 = cnVisitorCard_Database
你真的在写
Set ws01 = Nothing
这不会引发错误,但会使您Countif
在下一行的调用失败。
这应该可以工作(并且代码更简单/更短):
Private Sub Card_FindCardNumber_AfterUpdate()
Dim rngSrch As Range, m 'as variant
Set rngSearch = cnVisitorCard_Database.Range("LookupCardNo")
m = Application.Match(CLng(Me.Card_FindCardNumber), rngSearch.Columns(1), 0)
If IsError(m) Then
'if no match then m is an error value
MsgBox "This is an incorrect ID"
Me.Card_FindCardNumber.Value = ""
Else
'if found match then m is the matching row number in rngSearch
With rngSearch.Rows(m)
Me.Card_ExpiryDate = .Cells(2).Value
'...etc
Me.Card_UpdatedInFF = .Cells(9).Value
End With
End If
End Sub
推荐阅读
- ruby - 如何将VirtualBox机器名设置为与多机Vagrantfile中的主机名相同?
- python - 使用 Python 脚本从 SQL DB 返回的日期不正确
- postgresql - wso2 API 端点创建失败:404 资源未找到
- 3d - 关于水平中平面的 3D 到 2D 投影
- c# - 打开应用程序时获取文件位置
- java - 在异步请求中读取响应正文
- javascript - 如何在反应原生中添加抽屉?
- javascript - 下拉菜单 OracleJet / Javascript
- python - 在调用函数前不久,我们如何恢复定义函数时存在的命名空间(全局、局部等)?
- javascript - 移动 x 轴以通过 chart.js 中给定的 y 轴值