我有一个命令按钮单击事件的代码,它不断抛出错误91.当我单步执行代码时,它会在“Set findvalue”代码执行后立即抛出错误。请参阅下面的代码段。在检查代码本身时,我无法弄明白。
'findvalue'的尺寸为范围对象。 'DataSH'是主数据表以记录ID列(B列)开头存在的工作表。用户表单元素在DataSH的数据表中设置为各自的列。
Private Sub cmdEdit_Click()
'declare the variables
Dim findvalue As Range
Dim cNum As Integer
Dim DataSH As Worksheet
'error handling
On Error GoTo errHandler:
'hold in memory and stop screen flicker
Application.ScreenUpdating = False
Set DataSH = Sheet1
设置此片段的click事件子例程将根据这些UF元素中的值(即更改或删除)更新DataSH中所选记录ID(行号标识符)的行上的相应列数据值)。重点是使用UF元素(文本框和组合框)中的任何更改来更新DataSH上的主数据表。
Set findvalue = DataSH.Range("B:B"). _
Find(What:=Me.tbRecID.Value, LookIn:=xlValues, LookAt:=xlWhole)
'update the values
findvalue = tbRecID.Value
findvalue.Offset(0, 1) = tbRecDate.Value
findvalue.Offset(0, 2) = cmbRecLoc.Value
findvalue.Offset(0, 3) = cmbRecCust.Value
findvalue.Offset(0, 4) = tbRecAmt.Value
findvalue.Offset(0, 5) = cmbRecComm.Value
findvalue.Offset(0, 6) = cmbRecPrin.Value
findvalue.Offset(0, 7) = tbRecTerr.Value
findvalue.Offset(0, 8) = tbRecRep.Value
答案 0 :(得分:1)
我认为DataSH没有设置。是" Sheet1"工作表的名称或工作表变量?如果它是一个名称,那么你必须像这样设置DataSH:
Set DataSH = thisworkbook.worksheets("Sheet1")
而不是Set DataSH = Sheet1
答案 1 :(得分:0)
错误91会弹出(在这种情况下),因为您尝试将值分配给尚未设置的某个范围,因此Me.tbRecID.Value
中不存在DataSH.Range("B:B")
。要避免此问题,可以添加一些错误异常,例如:
Set findvalue = DataSH.Range("B:B"). _
Find(What:=Me.tbRecID.Value, LookIn:=xlValues, LookAt:=xlWhole)
'update the values
On Error GoTo ErrHand:
findvalue = tbRecID.Value
On Error GoTo 0
findvalue.Offset(0, 1) = tbRecDate.Value
findvalue.Offset(0, 2) = cmbRecLoc.Value
findvalue.Offset(0, 3) = cmbRecCust.Value
findvalue.Offset(0, 4) = tbRecAmt.Value
findvalue.Offset(0, 5) = cmbRecComm.Value
findvalue.Offset(0, 6) = cmbRecPrin.Value
findvalue.Offset(0, 7) = tbRecTerr.Value
findvalue.Offset(0, 8) = tbRecRep.Value
ErrHand:
[rest of your code]
如果没有为此变量分配范围,这将强制程序绕过使用findvalue
的行。
答案 2 :(得分:0)
您的代码无法找到" Me.tbRecID.Value"在" DataSH.Range(" B:B")"
所以将你的代码包装在" If Then End If"如果findvalue实际上已设置为有效范围
,则执行Set findvalue = DataSH.Range("B:B"). _
Find(What:=Me.tbRecID.Value, LookIn:=xlValues, LookAt:=xlWhole)
If Not findvalue Is Nothing Then
findvalue.Offset(0, 1) = tbRecDate.Value
findvalue.Offset(0, 2) = cmbRecLoc.Value
findvalue.Offset(0, 3) = cmbRecCust.Value
findvalue.Offset(0, 4) = tbRecAmt.Value
findvalue.Offset(0, 5) = cmbRecComm.Value
findvalue.Offset(0, 6) = cmbRecPrin.Value
findvalue.Offset(0, 7) = tbRecTerr.Value
findvalue.Offset(0, 8) = tbRecRep.Value
End If