返回数据最后一行vba用户表单excel

时间:2015-11-10 08:31:59

标签: excel vba excel-vba userform

我制作某种足球数据库,我会使用userform输入数据,以及从excel数据库中检索数据的位置。

我有一张名为" wedstrijden"的工作表。 此工作表包含以下列:Date,HomeTeam,AwayTeam,HomeScore,AwayScore,HomeOdds和AwayOdds。

我的其他工作表名为" ingevenuitslagen"。 此工作表包含名为" UitslagenIngeven"。

的用户表单

使用下面的代码,我可以将用户表单中的数据输入到我的" 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

但现在我想使用名为" GetData"的按钮将最后一行(工作表" wedstrijden")的值返回到我的userform,但我不知道如何编码那个按钮。

1 个答案:

答案 0 :(得分:1)

此按钮与您已有的按钮看起来很像,如下所示:

Private Sub GetData_Click()
Dim wedstrijden As Worksheet
Set wedstrijden = ThisWorkbook.Sheets("wedstrijden")

With wedstrijden
    NextRow = .Cells(.Rows.Count, 1).End(xlUp).Row

    UitslagenIngeven.date_txt.Text = .Cells(NextRow, 1)
    UitslagenIngeven.cboHomeTeam = .Cells(NextRow, 2)
    UitslagenIngeven.cboAwayTeam = .Cells(NextRow, 3)
    UitslagenIngeven.cboHScore = .Cells(NextRow, 4)
    UitslagenIngeven.cboAScore = .Cells(NextRow, 5)
    UitslagenIngeven.hodds_txt.Text = .Cells(NextRow, 6)
    UitslagenIngeven.aodds_txt.Text = .Cells(NextRow, 7)
End With
End Sub

如何使用数据阵列

放入UserForm以填充数据数组的代码:

Public DataA() 'This line should be at the top of the module

'Code to Set the dimension of the Data array
Private Sub UserForm_Initialize()
    '5 is the number of information that you want to store
    Dim DataA(5,0) 
    '----Or
    'Take the number of column of your Data Base
    Dim DataA(ThisWorkbook.Sheets("DB").Range("A1").End(xlToRight).Column + 1,0) 

    'Rest of your code
End Sub

'Code to add a data set to the data array
Private Sub CommandButton1_Click()
    UnFilter_DB 'See below procedure

    DataA(1) = Now()
    DataA(2) = Me.Lb_Data.Caption
    DataA(3) = Me.Lb_Year.Caption
    DataA(4) = Me.Lb_BL.Caption
    DataA(5) = Me.Lb_Country

    ReDim Preserve DataA(Lbound(DataA,1) To Ubound(DataA,1), Lbound(DataA,2) To Ubound(DataA,2)+1)
End Sub

'Code to sent the data array to the DB
Private Sub CommandButton2_Click()
    ReDim Preserve DataA(Lbound(DataA,1) To Ubound(DataA,1), Lbound(DataA,2) To Ubound(DataA,2)-1)

    SetData DataA
End Sub

打印从用户表单传递的数据数组的过程:

Public Sub SetData(ByVal Data_Array As Variant)
Dim DestRg As Range, _
    A()
'Find the last row of your DataBase
Set DestRg = ThisWorkbook.Sheets("DB").Range("Db_Val").Cells(ThisWorkbook.Sheets("DB").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
'Set Increasing ID
ThisWorkbook.Sheets("DB").Cells(Rows.Count, 1).End(xlUp) = ThisWorkbook.Sheets("DB").Cells(Rows.Count, 1).End(xlUp).Offset(-1, 0) + 1
End Sub

转到您要使用的数据库的未过滤器(这里是Db_Val表中的命名范围DB

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
    Sheets("DB").Activate
    Sheets("DB").Range("A1").Activate
    Sheets("DB").ShowAllData
    DoEvents
    Sheets(ActiveS).Activate
Application.ScreenUpdating = CurrScreenUpdate
End Sub