【发布时间】:2019-10-30 14:40:41
【问题描述】:
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 学习)“Excel VBA with Userform Vlookup”的代码:
Ws01 实际上是代表 cnVisitorCard_Database 工作表的电子表格的代码名称。
Vlookup指的是命名范围:“LookupCardNo”,它有一个覆盖9列数据的偏移函数(从AC列(卡号)到名称范围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
如果数字存在,我当然希望它将值返回到用户窗体上的文本框中,但如果它不存在,那么我希望它会弹出一条消息告诉我号码不存在。
如果能提供任何帮助,我将不胜感激 :) 当然,我不知道一旦解决了这个问题,是否还会出现其他错误。
【问题讨论】:
-
你能省略
Set ws01 = cnVisitorCard_Database这一行并检查它是否正在运行。同时删除Dim ws01 as Worksheet。 -
因为
ws01是电子表格的代号,所以不需要设置。 -
我注释掉了“Set ws01 = cnVisitorCard_Database”,得到了同样的错误(01)。
-
我注释掉了“Dim ws01 as Worksheet”,当然我得到了错误,指出变量 ws01 尚未定义。
-
我在代码窗口顶部有 Option Explicit,因此必须定义工作表……我对其他项目中的那部分代码没有问题我做了
标签: excel vba variables userform