Vba 运行时错误';1004';:方法';范围';对象的'_全球';失败6
好的。我希望这是最后一期。我有我的代码在另一个领域,并得到了一些很大的帮助。我想他(拉塔菲亚)很忙,今天还没有回音。所以我想我会在这里转载。我在RwLast=Range(“AI”&ActiveSheet.Rows.Count,2).End(xlUp).Offset(1,0).行中遇到此运行时错误。当我点击submit时,它也没有在下一行输入数据。它正在替换我不想要的第一行上的数据。填写和提交表单时,需要添加到每一行。任何帮助都将受到极大的感谢。excel工作表的代码如下所示Vba 运行时错误';1004';:方法';范围';对象的'_全球';失败6,vba,excel,Vba,Excel,好的。我希望这是最后一期。我有我的代码在另一个领域,并得到了一些很大的帮助。我想他(拉塔菲亚)很忙,今天还没有回音。所以我想我会在这里转载。我在RwLast=Range(“AI”&ActiveSheet.Rows.Count,2).End(xlUp).Offset(1,0).行中遇到此运行时错误。当我点击submit时,它也没有在下一行输入数据。它正在替换我不想要的第一行上的数据。填写和提交表单时,需要添加到每一行。任何帮助都将受到极大的感谢。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%了解您的应用程序的设计,但我认为以下几点会有所帮助:
Range("AI" & ActiveSheet.Rows.Count, 2).End(xlUp).Offset(1, 0).Row
是无效的语法。我认为您需要的是范围(“AI”&ActiveSheet.Rows.Count).End(xlUp).Offset(1,0).Row
。这样做的目的是查看第一个空行,它位于列AI
中最后使用的行下方。但是它需要修改一下
Range
这里可能指的是ActiveSheet
,它不是月工作表,而是用户表单所在的工作表。通常,Range
是activesheet.Range
(如果代码在VBA
模块中)或它指的是输入它的工作表(如果它是在工作表模块中输入的),它是一种快捷方式,有时会很危险
一个好的做法是完全限定范围:Worksheets(shtCmb).range(“AI”和Worksheets(shtCmb).Rows.Count).End(xlUp).Offset(1,0).Row
:这保证您查看的是目标工作表的最后一行,columnAI
那么,为什么要转到lastrow+1
而不是lastrow
还要记住,整数
的范围被限制到32767
,并且只要行号超过此值,就会出现错误。我会使用Long
。实际上,整数
在内部被转换为Long
s(但如果它们超出范围,仍然会抛出错误!),所以为什么不首先使用Long呢
我希望这能让你开始,但请让我知道,如果有任何修改将有助于下面的评论
最好的,
伊奥尼斯
PS:同样,你做了太多费力的工作,也许考虑定义数组而不是所有这些变量。 编辑:
每个提交的条目跳过一行
这是因为它标识了RwLast
,这是第一行的空单元格,并将新内容写入下面一行:
Worksheets(shtCmb).Range("AI" & RwLast + 1).Value = cellVal1
等等。要解决此问题,请更改
RwLast = Worksheets(shtCmb).Range("AI" & Worksheets(shtCmb).Rows.Count).End(xlUp).Offset(1, 0).Row
到
EDIT2:
添加Application.EnableEvents=False
保证在执行子BTNSSubmit\u Click()
时不会自动触发任何事件。然而,我们需要小心。子例程的启动方式如下:
Sub btnSubmit_Click()
On Error GoTo errHandler
Application.EnableEvents = False
就这样结束
errHandler:
Application.EnableEvents = True
End Sub
然后,在
btnsupmit\u单击中没有任何内容会更改shtCmb
的行2
,除非WrkSheet=Worksheets(shtCmb)
和rblast=1
。目前尚不清楚WrkSheet
是如何定义的,但我想您已经注意到了。您能否详细说明一下您希望通过范围(“AI”&ActiveSheet.Rows.Count,2).结束(xlUp).偏移量(1,0).行
?特别是,您正在查找哪列的第一个空单元格?想象一本有14页的woorkbook。第一页是userform将打开的地方,其中有关于如何使用userform的说明。sheet2是存储组合框列表的位置,此工作表是隐藏的。表3-15为月份名称。第3张为1月,第4张为2月。每张纸的列从A-AJ开始。您是用户。填写表格,点击提交按钮时选择月份为一月。表格上的数据进入工作表“一月”。假设您有另一个一月条目。该条目应填充到下一行。这就是我想要做的。太谢谢你了!!明天我会在工作时再试试这个,然后告诉你结果。呃,我真希望这能奏效。:)别担心!它本身就可以工作,但即使它不立即这样做,也只需要几次迭代,这里的人非常快:)大部分时间都在工作。现在只有两个问题。第一个问题是,每当您添加新条目时,它仍然会更改第二行中的条目,但是它也会将数据放在另一行中。第二个问题是每个提交的条目跳过一行。对于第二个问题,我添加了一个编辑。对于第一个问题:其中工作表
更改了第2行
中的条目?是在第一张纸上吗?让我知道。我认为直到RwLast
定义之前的代码必须是OK
(即,innocent)。第二行被覆盖的原因是您方框的\u Change
事件正在触发。如果触发了userform
的\u initialize
事件,则会发生这种情况,因为它会填充(更改)框。还有其他活动吗?userform的\u initialize
事件应仅在首次加载时触发。。
errHandler:
Application.EnableEvents = True
End Sub