我正在尝试创建一个UserForm来跟踪Job应用程序。一旦用户填写文本框并单击保存,它就会将数据从文本框传输到名为"的excel表;数据库";。下面的代码是我的Sub Save
,它在Save_CmdBt_Click事件中运行。当我输入我的第一个数据记录并单击保存时,一切都很好——没有错误。但是,当我输入第二个数据记录时,我得到对象"Range"的方法"_Default"失败错误。调试时,它在代码中的.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-删除图像。错误出现在Listbox中,它在每次保存/删除调用后都会更新。
编辑4(问题解决方案(
关于ListBox1的If和Else语句是导致错误的原因。从本质上讲,我想要一个动态的ListBox,并且最初的条件只适用于表中的第二行(即标题和第一行(。因此,在第二条记录/数据之后,ListBox将不会更新,因为它由于设置的条件而无法更新,从而导致对象"范围"的方法"_default"失败错误。
确保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添加