Excel Userform VBA不会移动到下一行

时间:2018-05-30 14:53:26

标签: excel vba excel-vba

我的userform可以正常填写Excel电子表格中的字段,但它拒绝移动到下一行。我不能通过要求找到一个空行来做到这一点,因为列A和C是预先填充的。有没有办法让userform在完成并提交并填写字段后跳转到下一行,也许可以使用B列来了解该行是否可以使用?因为无论如何,A和C列都被填充。此外,一旦用户完成,保存文档,稍后再回来,用户是否会选择上次停止的任何行?我知道我已经发布了这个,但没有解决方案有效,我想我会添加更多细节。对不起,如果其中一些似乎是新手,我是VBA的新手。谢谢!

Private Sub butOK_Click()
Dim RowCount As Long
Dim ctl As Control

RowCount = Worksheets("EXPECTED RETURNS").Range("A6865").CurrentRegion.Rows.Count
 With Worksheets("EXPECTED RETURNS").Range("A6865")
.Offset(LastRow, 1).Value = Me.txtDate.Value
.Offset(LastRow, 3).Value = Me.txtDevice.Value
.Offset(LastRow, 4).Value = Me.txtID.Value
.Offset(LastRow, 5).Value = Me.txtSN.Value
.Offset(LastRow, 6).Value = Me.txtTrans.Value
.Offset(LastRow, 7).Value = Me.txtIDTrans.Value
.Offset(LastRow, 8).Value = Me.txtMS.Value
.Offset(LastRow, 9).Value = Me.txtCountry.Value
.Offset(LastRow, 10).Value = Me.txtCamp.Value
.Offset(LastRow, 11).Value = Me.txtOrig.Value
.Offset(LastRow, 12).Value = Me.txtProgram.Value
.Offset(LastRow, 13).Value = Me.txtPOC.Value
.Offset(LastRow, 14).Value = Me.txtPOCEmail.Value
.Offset(LastRow, 15).Value = Me.txtDSN.Value
.Offset(LastRow, 16).Value = Me.txtIR.Value
.Offset(LastRow, 17).Value = Me.txtEI.Value
End With

For Each ctl In Me.Controls
If TypeName(ctl) = "TextBox" Or TypeName(ctl) = "ComboBox" Then
ctl.Value = ""
ElseIf TypeName(ctl) = "CheckBox" Then
ctl.Value = False
End If
Next ctl

End Sub

2 个答案:

答案 0 :(得分:0)

下面的代码将在EXPECTED RETURNS表格中找到最后使用的行,并在下一行中复制数据。此外,它假设您为表单中的所有相关元素设置了tag号码:1表示TextDate,3表示TextDevice,依此类推。这样,您的代码可以缩减为以下内容:

Private Sub butOK_Click()
    Dim LastRow As Long
    Dim ctl As Control
    Dim i As Integer

    'Get last row with data
    LastRow = Worksheets("EXPECTED RETURNS").Range("A" & Rows.Count).End(xlUp).Row + 1

    'Get all control values, and write to column according to their tag
    For Each ctl In Me.Controls
        If ctl.Tag <> "" Then
            i = ctl.Tag
            Worksheets("EXPECTED RETURNS").Cells(LastRow, i) = ctl.Value
        End If
    Next

    'Clear all controls
    For Each ctl In Me.Controls
        If TypeName(ctl) = "TextBox" Or TypeName(ctl) = "ComboBox" Then
            ctl.Value = ""
        ElseIf TypeName(ctl) = "CheckBox" Then
            ctl.Value = False
        End If
    Next ctl
End Sub

答案 1 :(得分:-2)

试试这个......

last = Application.ThisWorkbook.Worksheets("YOURSHEET").Range("A65536").End(xlUp).Row

    Application.ThisWorkbook.Worksheets("Yourshee").Cells(last + 1, 1) = anything()                          'data
    Application.ThisWorkbook.Worksheets("Yoursheet").Cells(last + 1, 2) = anything            
    Application.ThisWorkbook.Worksheets("Yoursheet").Cells(last + 1, 3) = anything
    Application.ThisWorkbook.Worksheets("Yoursheet").Cells(last + 1, 4) = anything            
    Application.ThisWorkbook.Worksheets("Yoursheet").Cells(last + 1, 5) = anything 
    MsgBox "Sucess"

如果需要,可以添加na iff语句以获得肯定结果和否定结果

相关问题