繁体   English   中英

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

[英]Run-time error '1004' : Method 'Range' of object'_Global' failed 6

好的。 我希望这是最后一个问题。 我的代码在另一个领域,并获得了很大的帮助。 我假设他(Ratafia)非常忙,今天没有回音。所以我想我将在此重新发布。 我在行RwLast = Range(“ AI”&ActiveSheet.Rows.Count,2).End(xlUp).Offset(1,0).Row上遇到此运行时错误。当在下一行向下时,它也未输入数据我点击了提交。 它替换了我不希望的第一行数据。 填写并提交表单后,需要在每一行中添加。 任何帮助将不胜感激。 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

是无效的语法。 我认为您想要的是Range("AI" & ActiveSheet.Rows.Count).End(xlUp).Offset(1, 0).Row 这样做的目的是查看列AI最后使用的行下方的第一个空行。 但是需要一点修改。

这里的Range可能是指ActiveSheet ,它不是月份表,而是用户窗体所在的表。 通常, RangeActiveheet.Range (如果代码在VBA模块中)的快捷方式,或者它引用输入该表的工作表(如果在工作表模块中输入的话),则可能很危险。偶尔。

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

然后,为什么要转到lastrow + 1而不是lastrow

还请记住, Integers的范围限制为32,767 ,并且只要行号超过此值,就会出现错误。 我会改用Long 实际上,无论如何, Integers在内部转换为Long (但如果它们超出了范围,仍然会引发错误!),所以为什么不在第一位使用long。

希望这可以帮助您入门,但是请在下面评论,让我知道是否有任何修正。

最好,约阿尼斯

PS:另外,您做了很多辛苦的工作,也许考虑定义数组而不是所有这些变量。

编辑:

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

编辑2:

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

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

像这样结束

errHandler:
    Application.EnableEvents = True

End Sub

然后是没有在btnSubmit_Click改变Row 2shtCmb 除非 WrkSheet = Worksheets(shtCmb) RwLast = 1 目前尚不清楚WrkSheet的定义方式,但我想您已经处理了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM