运行时错误'1004':object'_Global'的方法'Range'失败6

好的。 只是最后一个问题,我希望。 我在另一个领域有我的代码,并得到了一些很好的帮助。 我认为他(Ratafia)很忙,今天还没有听到。所以我想我会在这里转发。 我在RwLast = Range(“AI”&ActiveSheet.Rows.Count,2).End(xlUp).Offset(1,0).Row行上得到这个运行时错误.Row它也没有在下一行input数据我点击提交。 它正在replace我不想要的行上的数据。 填写和提交表格时,需要添加到每一行。 任何帮助将大大appriciated。 Excel表格的代码如下。

Option Explicit Dim WrkSheet As Worksheet Private Sub btnSubmit_Click() Application.EnableEvents = False Dim ssheet As Workbook Dim cellVal1 As String, cellVal2 As String, cellVal3 As String, cellVal4 As String, cellVal5 As String, cellVal6 As String, cellVal7 As String, cellVal8 As String, cellVal9 As String, cellVal10 As String, cellVal11 As String, cellVal12 As String Dim cellVal13 As String, cellVal14 As String, cellVal15 As String, cellVal16 As String, cellVal17 As String, cellVal18 As String, cellVal19 As String, cellVal20 As String, cellVal21 As String, cellVal22 As String Dim cellVal23 As String, cellVal24 As String, cellVal25 As String, cellVal26 As String, cellVal27 As String, cellVal28 As String, cellVal29 As String, cellVal30 As String, cellVal31 As String, cellVal32 As String, cellVal33 As String, cellVal34 As String Dim shtCmb As String Dim RwLast As Long shtCmb = Me.cmbListItem1.Value If shtCmb = "" Then MsgBox "Please choose a month.", vbOKOnly Me.cmbListItem1.SetFocus End If cellVal1 = Me.cmbListItem1.Text cellVal2 = Me.cmbListItem2.Text cellVal3 = Me.cmbListItem3.Text cellVal4 = Me.TextBox31.Text cellVal5 = Me.TextBox1.Text cellVal6 = Me.TextBox2.Text cellVal7 = Me.TextBox3.Text cellVal8 = Me.TextBox4.Text cellVal9 = Me.TextBox5.Text cellVal10 = Me.TextBox6.Text cellVal11 = Me.TextBox7.Text cellVal12 = Me.TextBox8.Text cellVal13 = Me.TextBox9.Text cellVal14 = Me.TextBox10.Text cellVal15 = Me.TextBox11.Text cellVal16 = Me.TextBox12.Text cellVal17 = Me.TextBox13.Text cellVal18 = Me.TextBox14.Text cellVal19 = Me.TextBox15.Text cellVal20 = Me.TextBox16.Text cellVal21 = Me.TextBox17.Text cellVal22 = Me.TextBox18.Text cellVal23 = Me.TextBox19.Text cellVal24 = Me.TextBox20.Text cellVal25 = Me.TextBox21.Text cellVal26 = Me.TextBox22.Text cellVal27 = Me.TextBox23.Text cellVal28 = Me.TextBox24.Text cellVal29 = Me.TextBox25.Text cellVal30 = Me.TextBox26.Text cellVal31 = Me.TextBox27.Text cellVal32 = Me.TextBox28.Text cellVal33 = Me.TextBox29.Text cellVal34 = Me.TextBox30.Text RwLast = Worksheets(shtCmb).Range("AI" & Worksheets(shtCmb).Rows.Count).End(xlUp).Row Worksheets(shtCmb).Range("AI" & RwLast + 1).Value = cellVal1 Worksheets(shtCmb).Range("AJ" & RwLast + 1).Value = cellVal2 Worksheets(shtCmb).Range("A" & RwLast + 1).Value = cellVal3 Worksheets(shtCmb).Range("AH" & RwLast + 1).Value = cellVal4 Worksheets(shtCmb).Range("B" & RwLast + 1).Value = cellVal5 Worksheets(shtCmb).Range("C" & RwLast + 1).Value = cellVal6 Worksheets(shtCmb).Range("D" & RwLast + 1).Value = cellVal7 Worksheets(shtCmb).Range("E" & RwLast + 1).Value = cellVal8 Worksheets(shtCmb).Range("F" & RwLast + 1).Value = cellVal9 Worksheets(shtCmb).Range("G" & RwLast + 1).Value = cellVal10 Worksheets(shtCmb).Range("H" & RwLast + 1).Value = cellVal11 Worksheets(shtCmb).Range("I" & RwLast + 1).Value = cellVal12 Worksheets(shtCmb).Range("J" & RwLast + 1).Value = cellVal13 Worksheets(shtCmb).Range("K" & RwLast + 1).Value = cellVal14 Worksheets(shtCmb).Range("L" & RwLast + 1).Value = cellVal15 Worksheets(shtCmb).Range("M" & RwLast + 1).Value = cellVal16 Worksheets(shtCmb).Range("N" & RwLast + 1).Value = cellVal17 Worksheets(shtCmb).Range("O" & RwLast + 1).Value = cellVal18 Worksheets(shtCmb).Range("P" & RwLast + 1).Value = cellVal19 Worksheets(shtCmb).Range("Q" & RwLast + 1).Value = cellVal20 Worksheets(shtCmb).Range("R" & RwLast + 1).Value = cellVal21 Worksheets(shtCmb).Range("S" & RwLast + 1).Value = cellVal22 Worksheets(shtCmb).Range("T" & RwLast + 1).Value = cellVal23 Worksheets(shtCmb).Range("U" & RwLast + 1).Value = cellVal24 Worksheets(shtCmb).Range("V" & RwLast + 1).Value = cellVal25 Worksheets(shtCmb).Range("W" & RwLast + 1).Value = cellVal26 Worksheets(shtCmb).Range("X" & RwLast + 1).Value = cellVal27 Worksheets(shtCmb).Range("Y" & RwLast + 1).Value = cellVal28 Worksheets(shtCmb).Range("Z" & RwLast + 1).Value = cellVal29 Worksheets(shtCmb).Range("AA" & RwLast + 1).Value = cellVal30 Worksheets(shtCmb).Range("AB" & RwLast + 1).Value = cellVal31 Worksheets(shtCmb).Range("AC" & RwLast + 1).Value = cellVal32 Worksheets(shtCmb).Range("AD" & RwLast + 1).Value = cellVal33 Worksheets(shtCmb).Range("AF" & RwLast + 1).Value = cellVal34 Application.EnableEvents = True End Sub Private Sub cmbListItem1_Change() End Sub Private Sub optionCancel_Click() Unload Me End Sub Private Sub UserForm_Initialize() Dim SH As Worksheet Dim Entry As Variant ' MonthName(Month(Now)) - Will return the name of the current Month For Each SH In ThisWorkbook.Worksheets If SH.Name = MonthName(month(Now)) Then Set WrkSheet = SH Exit For End If Next 'fill the combo box With Me.cmbListItem1 For Each Entry In [List1] .AddItem Entry Next Entry .Value = MonthName(month(Now)) End With 'fill the combo box With Me.cmbListItem2 For Each Entry In [List2] .AddItem Entry Next Entry End With 'fill the combo box With Me.cmbListItem3 For Each Entry In [List3] .AddItem Entry Next Entry End With End Sub 

我不是100%知道您的应用程序的devise,但我认为以下将有所帮助:

 Range("AI" & ActiveSheet.Rows.Count, 2).End(xlUp).Offset(1, 0).Row 

是一个无效的语法。 我想你想要的是Range("AI" & ActiveSheet.Rows.Count).End(xlUp).Offset(1, 0).Row 。 这是做什么的,看着第一个空行,在列AI最后使用的行下面find。 但是需要修改一下..

此处的Range可能是指ActiveSheet ,它不是月份工作表,而是用户表所在的工作表。 通常, RangeActiveheet.Range (如果代码位于VBA模块中)的快捷方式,或者它是指input它的工作表(如果input到工作表模块中),那么它可能是危险的偶尔。

一个好的做法是完全限定范围: Worksheets(shtCmb).Range("AI" & Worksheets(shtCmb).Rows.Count).End(xlUp).Offset(1, 0).Row代替:这保证你正在查看目标表的最后一行,列AI

那么,为什么去lastrow + 1而不是lastrow

还要记住Integers的范围是有限的,直到32,767 ,并且只要行数超过这个值就会出错。 我会用Long来代替。 实际上, Integers在内部被转换成了Long (但是如果超出范围仍然会抛出错误!),那么为什么不在第一个地方使用longs。

我希望这可以让你开始,但是让我知道如果有任何修改将通过下面的评论帮助。

最好的,Ioannis

PS:另外,你做了太多繁重的工作,也许考虑定义数组而不是所有这些variables。

编辑:

it is skipping a row per each entry submited

这是因为它标识了RwLast ,它是空单元格的第一行,并将新内容写入下面一行:

 Worksheets(shtCmb).Range("AI" & RwLast + 1).Value = cellVal1 

等等。 要解决这个问题,请改变

 RwLast = Worksheets(shtCmb).Range("AI" & Worksheets(shtCmb).Rows.Count).End(xlUp).Offset(1, 0).Row 

 RwLast = Worksheets(shtCmb).Range("AI" & Worksheets(shtCmb).Rows.Count).End(xlUp).Row 

EDIT2:

添加Application.EnableEvents=False保证在执行Sub btnSubmit_Click()时不会自动Sub btnSubmit_Click() 。 但是,我们需要小心。 子程序应该像这样开始:

 Sub btnSubmit_Click() On Error GoTo errHandler Application.EnableEvents = False 

并像这样结束

 errHandler: Application.EnableEvents = True End Sub 

然后在btnSubmit_Click中没有什么更改btnSubmit_Click Row 2除非 WrkSheet = Worksheets(shtCmb) RwLast = 1 。 目前还不清楚WrkSheet是如何定义的,但我认为你已经考虑到了这一点。