You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:54:26