Arrays 如何一次将多个数据行从UserForm添加到Excel数据库

Arrays 如何一次将多个数据行从UserForm添加到Excel数据库,arrays,vba,excel,userform,Arrays,Vba,Excel,Userform,我正在制作一个足球数据库,在这里我可以使用userform输入数据,并从我的excel数据库中检索数据 我有一个名为“wedstrijden”的工作表。该工作表包含以下列:日期、HomeTeam、AwayTeam、HomeScore、AwayScore、HomeODS和AwayODS 我的另一个工作表名为:“ingevenuitslagen”。此工作表包含我的名为UitSlageningen的用户表单 使用下面的代码,我能够将我的数据从userform输入到我的“wedstrijden”工作表中

我正在制作一个足球数据库,在这里我可以使用userform输入数据,并从我的excel数据库中检索数据

我有一个名为“wedstrijden”的工作表。该工作表包含以下列:日期、HomeTeam、AwayTeam、HomeScore、AwayScore、HomeODS和AwayODS

我的另一个工作表名为:“ingevenuitslagen”。此工作表包含我的名为UitSlageningen的用户表单

使用下面的代码,我能够将我的数据从userform输入到我的“wedstrijden”工作表中

Private Sub putAway_Click()
Dim ingevenuitslagen As Worksheet
Set ingevenuitslagen = ThisWorkbook.Sheets("wedstrijden")
NextRow = ingevenuitslagen.Cells(Rows.Count, 1).End(xlUp).Row + 1
ingevenuitslagen.Cells(NextRow, 1) = CDate(date_txt.Text)
ingevenuitslagen.Cells(NextRow, 2) = UitslagenIngeven.cboHomeTeam
ingevenuitslagen.Cells(NextRow, 3) = UitslagenIngeven.cboAwayTeam
ingevenuitslagen.Cells(NextRow, 4) = UitslagenIngeven.cboHScore
ingevenuitslagen.Cells(NextRow, 5) = UitslagenIngeven.cboAScore
ingevenuitslagen.Cells(NextRow, 6) = Val(UitslagenIngeven.hodds_txt.Text)
ingevenuitslagen.Cells(NextRow, 7) = Val(UitslagenIngeven.aodds_txt.Text)
End Sub
但这只是为了放一排。我想提出一种可能性,一次把10行或15行放好。因此,我将创建一个用户表单,它可以放置20行,但它应该能够仅放置那些已填充的行

这可能吗?我应该如何调整我的用户表单?我可以只复制文本和组合框区域吗?

如何使用数据数组 您需要创建一个新按钮,您将有:

  • 一个用于将数据集添加到数据数组中(此处为
    CommandButton1
    ),以及
  • 一到将数据数组添加到数据库中(此处
    命令按钮2
    我还更喜欢使用数据库的命名范围,这里称为
    Db_Val
    ,但您可以根据需要重命名它!)

    要放置在UserForm中以填充数据数组的代码: 在数据库中打印从用户窗体传递的数据数组的过程: 这里的数据库是
    ingevenuitslagen
    表中的命名范围
    Db_Val

    Public Sub SetData(ByVal Data_Array As Variant)
    Dim DestRg As Range, _
        A()
    '----Find the last row of your DataBase
    Set DestRg = ingevenuitslagen.Range("Db_Val").Cells(ingevenuitslagen.Range("Db_Val").Rows.Count, 1)
    '----Print your array starting on the next row
    DestRg.Offset(1, 0).Resize(UBound(Data_Array, 1), UBound(Data_Array, 2)).Value = Data_Array
    End Sub
    
    Sub可取消筛选正在使用的数据库: 大家好

    我也面临同样的挑战。我的目标是能够下客户的订单。根据我的代码,我每次只能为客户下一个订单。我希望能够在一个Userform中同时为一个客户的每个订单放置多个产品,并且它将更新多行。以下代码只能为一个客户用一行中的一个产品更新一行:

    Private Sub cmdAdd_Click()
    Dim lRow As Long
    Dim ws As Worksheet
    lRow = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
    With ws
        .Cells(lRow, 1).Value = Me.Data1.Value
        .Cells(lRow, 2).Value = Me.Data2.Value
        .Cells(lRow, 3).Value = Me.Data3.Value
        .Cells(lRow, 4).Value = Me.Data4.Value
        .Cells(lRow, 5).Value = Me.Data5.Value
        .Cells(lRow, 6).Value = Me.Data6.Value
        .Cells(lRow, 7).Value = Me.Data7.Value
        .Cells(lRow, 8).Value = Me.Data8.Value
        .Cells(lRow, 9).Value = Me.Data9.Value
        .Cells(lRow, 10).Value = Me.Data10.Value  
    End With
    End Sub
    

    以上内容只能为每个客户更新一个产品。客户可以为多个产品下订单。

    这样我现在就可以创建一个具有任意多行功能的userform了?我可以将excel工作簿发送给您,让您查看一下吗?确实,使用此方法,您可以拥有任意多行。但是我调整了一切,使之符合您给出的代码,并解释了当我不知道某个东西的名称时要更改的内容,所以一切都已经完成了。您只需创建当前用户表单的副本,添加我提供的代码,并重命名
    CommandButton1
    CommandButton2
    和命名范围
    Db_Val
    ,以满足您的需要,因此您应该能够从那里处理它。不过有一个小问题。有可能走另一条路吗。例如,返回我的userform中的最后15行?这是可能的,但是您将如何显示它?您需要一个新按钮或其他东西来在UF中的这些行中移动。尝试一下,如果你被卡住了,可以发布一个问题,但有了这里的内容,你应该能够为这种功能性打下良好的基础!;)
    Public Sub UnFilter_DB()
    '----Use before "print" array in sheet to unfilter DB to avoid problems (always writing on the same row if it is still filtered)
    Dim ActiveS As String, CurrScreenUpdate As Boolean
    CurrScreenUpdate = Application.ScreenUpdating
    Application.ScreenUpdating = False
    ActiveS = ActiveSheet.Name
        ingevenuitslagen.Activate
        ingevenuitslagen.Range("A1").Activate
        ingevenuitslagen.ShowAllData
        DoEvents
        Sheets(ActiveS).Activate
    Application.ScreenUpdating = CurrScreenUpdate
    End Sub
    
    Private Sub cmdAdd_Click()
    Dim lRow As Long
    Dim ws As Worksheet
    lRow = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
    With ws
        .Cells(lRow, 1).Value = Me.Data1.Value
        .Cells(lRow, 2).Value = Me.Data2.Value
        .Cells(lRow, 3).Value = Me.Data3.Value
        .Cells(lRow, 4).Value = Me.Data4.Value
        .Cells(lRow, 5).Value = Me.Data5.Value
        .Cells(lRow, 6).Value = Me.Data6.Value
        .Cells(lRow, 7).Value = Me.Data7.Value
        .Cells(lRow, 8).Value = Me.Data8.Value
        .Cells(lRow, 9).Value = Me.Data9.Value
        .Cells(lRow, 10).Value = Me.Data10.Value  
    End With
    End Sub