1

我想问一下如何使用Userform.

当我将新产品 A 添加到工作表时,我希望新数据位于产品 A 的最后一行下方,其他产品 B 和 C 也是如此。

当我将新数据输入到现有表中时,有什么方法可以准确地对数据进行排序?

我下面的代码逐行添加数据,无论我输入什么产品,都使表格未排序并显得分散。

Private Sub CommandButton1_Click()
    Dim LastRow As Object

    Set LastRow = Sheet1.Range("a65536").End(xlUp)

    LastRow.Offset(1, 0).Value = TextBox1.Text
    LastRow.Offset(1, 1).Value = TextBox2.Text
    LastRow.Offset(1, 2).Value = TextBox3.Text

    MsgBox "One record written to Sheet1"

    If MsgBox("Do you want to continue entering data?", vbYesNo + vbCritical, "Caution") = vbYes Then
        TextBox1.Text = ""
        TextBox2.Text = ""
        TextBox3.Text = ""
    Else
        End
        TextBox1.SetFocus
        Unload Me
    End If
End Sub
4

1 回答 1

0

您可以将数据添加到最后一行,然后对数据进行排序。

1)要获得最后一行,请参阅此链接

2)要对数据进行排序,您可以使用这个简单的代码。下面的示例代码将对具有标题的 Col A 进行排序

With Sheets("Sheet1")
    .Columns("A:A").Sort Key1:=.Range("A1"), Order1:=xlAscending, Header:=xlYes, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal
End With

3)关于使用的一个提示:请参阅线程End中的第 6 点。

4)因此,如果我将两个代码结合起来,那么您的代码将如下所示

Option Explicit

Private Sub CommandButton1_Click()
    Dim LastRow As Long

    '~~> Change this to the releavnt sheet name
    With Sheets("Sheet1")
        LastRow = .Range("A" & .Rows.Count).End(xlUp).Row + 1

        .Range("A" & LastRow) = TextBox1.Text
        .Range("B" & LastRow) = TextBox2.Text
        .Range("C" & LastRow) = TextBox3.Text

        '~~> Sort the Data. I am assuming that Row 1 has Headers
        .Columns("A:C").Sort Key1:=.Range("A2"), Order1:=xlAscending, Header:=xlYes, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
    End With

    If MsgBox("One record written to Sheet1. Do you want to continue entering data?", vbYesNo + vbCritical, "Caution") = vbYes Then
        TextBox1.Text = ""
        TextBox2.Text = ""
        TextBox3.Text = ""
        TextBox1.SetFocus
    Else
      Unload Me
    End If
End Sub
于 2013-02-14T06:16:48.230 回答