首页 > 解决方案 > 将第二个数据条目添加到 Excel 表中时,对象“范围”的 VBA 错误方法“_Default”失败

问题描述

我正在尝试创建一个用户表单来跟踪工作申请。一旦用户填写文本框并单击保存,它将数据从文本框传输到名为“数据库”的 Excel 表。以下代码是我Sub Save在 Save_CmdBt_Click 事件中运行的。当我输入我的第一个数据记录并单击保存时,一切正常 - 没有错误。但是,当我输入第二个数据记录时,我得到对象“范围”的方法“_默认”失败错误。.Cells(iRow, 1) = iRow - 5在调试时,它在代码行中失败。

    Dim sh As Worksheet
    Dim iRow As Long
       
    Set sh = ThisWorkbook.Sheets("Database")                'actual database sheet
    
    If UserFormV2.RowNumber_Textbox.Value = "" Then         'when I debug for 2nd record
        iRow = [Counta(Database!A:A)] + 1                   'this line of code was executed, thus, txtbox value was "" for sure
    Else
        iRow = UserFormV2.RowNumber_Textbox.Value           'set to "" unless user selects one entry from listbox
    End If
    
    With sh
        '.Activate
        .Cells(iRow, 1) = iRow - 5 '-5 because that is first available row after Table header. 
        ' The above code adds record number (1,2,3...) in excel table. 

        '.Cells(iRow, 3) = UserFormV2.CompanyName_TextBox1.Value ... my extra code
        
    End With

我已经检查了以下帖子(如果对象“范围”在插入表时失败,则 VBA 错误方法的“_Default”)但是当错误触发时我没有任何文本框。任何想法或建议我如何解决这个问题?


编辑 2 - 添加了 Excel 工作表的图像以及工作和非工作子保存方法之间的比较。


编辑 3 - 删除图像。每次保存/删除调用后都会更新列表框中的错误。


编辑 4(问题的解决方案)

有关 ListBox1 的 If 和 Else 语句是错误的原因。本质上,我想要一个动态 ListBox 并且最初的条件仅适用于表中的第二行(即标题和第一行)。因此,在第二条记录/数据之后,ListBox 不会更新,因为它由于设置条件而无法更新,从而导致Method '_default' of Object 'Range' failed' 错误

标签: excelvbauserform

解决方案


确保iRow是一个有效的数字

Private Sub CommandButton1_Click()
    Dim sh As Worksheet, iRow As Long
    Set sh = ThisWorkbook.Sheets("Database") 'actual database sheet
    
    If IsNumeric(RowNumber_TextBox.Value) Then iRow = RowNumber_TextBox.Value
    If iRow < 1 Then
       iRow = sh.Cells(Rows.Count, "A").End(xlUp).Row + 1
    End If
    
End Sub

编辑 - 添加了 IsNumeric


推荐阅读