VBA运行时错误91求助:查找首个空行时报错
搞定VBA运行时错误91:对象变量未设置的问题
你遇到的错误91,根源出在查找首个空行的那行代码上——当你的sheet1工作表完全没有任何数据的时候,ws.Cells.Find(...)这个查找操作会返回Nothing(也就是找不到任何匹配内容),这时候你直接去访问它的.Row属性,自然就会触发“对象变量未设置”的错误。
我给你调整了代码,核心是先判断查找结果是否存在,再处理行号的赋值:
Private Sub diaryenter_Click() Dim iRow As Long Dim ws As Worksheet Dim findResult As Range ' 新增变量存查找结果,避免直接操作可能为空的对象 Set ws = Worksheets("sheet1") ' 查找数据库最后一行有数据的单元格 Set findResult = ws.Cells.Find(What:="*", SearchOrder:=xlRows, _ SearchDirection:=xlPrevious, LookIn:=xlValues) ' 根据查找结果判断首空行 If findResult Is Nothing Then ' 如果工作表完全空,设置起始行(如果你的表有表头,就改成2) iRow = 1 Else ' 找到最后一行数据,首空行就是它的下一行 iRow = findResult.Row + 1 End If ' 把数据写入数据库 With ws .Cells(iRow, 115).Value = Me.autodatet.Value .Cells(iRow, 116).Value = Me.fdcomments.Value .Cells(iRow, 121).Value = Me.fdgs.Value End With ' 清空输入框 Me.autodatet.Value = "" Me.fdcomments.Value = "" Me.fdgs.Value = "" Diaryentryf.Hide ThisWorkbook.Save End Sub
简单说下修改的关键点:
- 新增了
findResult变量专门存储查找的返回值,这样就能先检查它是不是Nothing - 分情况处理:工作表为空时直接指定首行,有数据时再取最后一行的下一行
- 彻底避免了直接对
Nothing对象调用属性的错误
另外也顺便提醒下:确认你的工作表名称确实是sheet1(VBA默认不区分大小写,但最好和Excel里显示的工作表名完全一致,比如如果是Sheet1首字母大写,就改成Worksheets("Sheet1"))。
内容的提问来源于stack exchange,提问作者Ben Waller
相关产品推荐
相关产品推荐

