Excel VBA提交按钮代码出现Run-time error 91问题求助
解决Excel VBA Run-time Error 91(对象变量未设置)问题
你的代码.Cells(iRow, 1) = iRow + 1触发Error 91,核心原因是对象引用未明确绑定或iRow变量未正确初始化,以下是具体修复方案:
1. 明确指定目标工作表
直接使用Cells会默认指向当前激活的工作表,如果提交时激活的不是你的"数据库工作表",就会导致对象引用异常。必须显式绑定到目标工作表:
' 用工作表名称绑定(注意名称要和实际一致) Sheets("数据库").Cells(iRow, 1) = iRow + 1 ' 更可靠的方式:用工作表代码名(在VBA编辑器的属性窗口修改(Name)属性,比如DbSheet) DbSheet.Cells(iRow, 1) = iRow + 1
2. 正确初始化iRow变量
iRow如果没有赋值(比如未找到数据库表的最后一行),会导致变量为空,进而触发错误。正确获取下一行行号的代码:
Dim iRow As Long ' 获取数据库工作表A列最后一行的下一行 iRow = Sheets("数据库").Cells(Sheets("数据库").Rows.Count, 1).End(xlUp).Row + 1
3. 完整的提交按钮示例代码
Option Explicit ' 强制变量声明,避免未定义变量的问题 Private Sub cmdSubmit_Click() Dim iRow As Long Dim dbSheet As Worksheet ' 绑定数据库工作表 Set dbSheet = ThisWorkbook.Sheets("数据库") ' 获取下一个可用行号 iRow = dbSheet.Cells(dbSheet.Rows.Count, 1).End(xlUp).Row + 1 ' 写入数据 dbSheet.Cells(iRow, 1) = iRow + 1 ' 按你的需求赋值 ' 示例:写入其他表单字段 ' dbSheet.Cells(iRow, 2) = Me.txtName.Value ' dbSheet.Cells(iRow, 3) = Me.txtPhone.Value ' 清空表单(可选) ' Me.txtName.Value = "" ' Me.txtPhone.Value = "" MsgBox "数据提交成功" End Sub
常见排查点
- 检查"数据库工作表"的名称是否拼写正确,区分大小写
- 确保工作表未被隐藏或删除
- 加上
Option Explicit在模块顶部,避免因变量未声明导致的隐性错误
内容的提问来源于stack exchange,提问作者satchidananda
相关产品推荐
相关产品推荐

