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

Excel Userform指定范围下一行保存数据异常问题求助

解决Userform数据存入指定范围A16-K21的问题

你的问题出在LastRow的计算逻辑上——当前代码用ws.Range("A16", "K21").End(xlUp).Row查找最后一行,但End(xlUp)会从该区域的右下角单元格(K21)开始向上检索,一旦遇到区域外的非空单元格(比如你提到的A22及以下有数据,或者A16上方有非空行),就会跳出你限定的16-21范围,导致计算出错误的行号。

下面是修改后的代码,完美实现数据依次存入A16、17…21行的需求,还加入了存满后的提示:

Private Sub cbSave_Click()
    Dim ws As Worksheet
    Dim LastRow As Long
    
    ' 指定工作表(建议用工作表名称代替ActiveSheet,避免切换工作表出问题)
    Set ws = ThisWorkbook.Worksheets("你的工作表名称") ' 替换成实际的表名,比如"Sheet1"
    
    ' 在A列的16-21范围内,从下往上找最后一个非空单元格
    LastRow = ws.Range("A21").End(xlUp).Row
    
    ' 判断如果找到的行在16以下(说明16-21都是空的),则从16开始存
    If LastRow < 16 Then
        LastRow = 16
    Else
        ' 否则下一行就是要存的行
        LastRow = LastRow + 1
    End If
    
    ' 检查是否超过限定的21行
    If LastRow > 21 Then
        MsgBox "存储范围已满(A16-K21),无法继续保存数据!", vbExclamation
        Exit Sub
    End If
    
    ' 将Userform数据写入对应单元格
    ws.Cells(LastRow, 1) = Me.tbApple
    ws.Cells(LastRow, 2) = Me.tbSony
    ws.Cells(LastRow, 3) = Me.tbWindow
    
    ' 可选:清空输入框,方便下次录入
    Me.tbApple = ""
    Me.tbSony = ""
    Me.tbWindow = ""
End Sub

代码逻辑说明:

  • 我们直接在A列的21行往上找最后一个非空单元格,严格限定在了16-21的范围内,不会受到区域外数据的干扰。
  • 加入了边界判断:如果16-21都为空,直接从16行开始;如果已经存到21行,弹出提示阻止继续存入。
  • 建议用ThisWorkbook.Worksheets("工作表名")代替ActiveWorkbook.ActiveSheet,避免用户切换工作表时数据存错位置。

内容的提问来源于stack exchange,提问作者Phiking

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:12:09