2016-08-25 3 views
0

Выполнение проекта для школы, и я могу получить данные для чтения в мою форму, но я не могу обновить свою форму, а затем перейти на новую запись. Может кому-то помочь.Как обновить таблицу из формы VBA?

Private Sub Next_Command_Click() 
    Do 
     nCurrentRow = nCurrentRow + 1 
     TraverseData (nCurrentRow) 
    Loop Until NC_C_L.Cells(nCurrentRow, 1).Value = "" Or NC_C_L.Cells(nCurrentRow, 1).Value = Me.***_Text.Value 
End Sub 

Private Sub Previous_Command_Click() 
    Do 
     nCurrentRow = nCurrentRow - 1 
     TraverseData (nCurrentRow) 
    Loop Until nCurrentRow = 1 Or NC_C_L.Cells(nCurrentRow, 1).Value = Me.***_Text.Value 
End Sub 

Private Sub TraverseData(nRow As Long) 
     Me.***_Text.Value = NC_C_L.Cells(nRow, 1) 
     Me.***_Box = NC_C_L.Cells(nRow, 2) 
     Me.***_Combo.Value = NC_C_L.Cells(nRow, 3) 
     Me.***_Combo.Value = NC_C_L.Cells(nRow, 4) 
     Me.***_Combo.Value = NC_C_L.Cells(nRow, 5) 
     Me.***_Combo.Value = NC_C_L.Cells(nRow, 6) 
     Me.***_Combo.Value = NC_C_L.Cells(nRow, 7) 
     Me.***_Text.Value = NC_C_L.Cells(nRow, 8) 
     Me.***_Text.Value = NC_C_L.Cells(nRow, 9) 
     Me.Comments1_Text.Value = NC_C_L.Cells(nRow, 10) 
     Me.Comments2_Text.Value = NC_C_L.Cells(nRow, 11) 
     Me.Comments3_Text.Value = NC_C_L.Cells(nRow, 12) 
     Me.PhoneNumber_Text.Value = NC_C_L.Cells(nRow, 13) 
     Me.Address1_Text.Value = NC_C_L.Cells(nRow, 14) 
     Me.Address2_Text.Value = NC_C_L.Cells(nRow, 15) 
     Me.City_Text.Value = NC_C_L.Cells(nRow, 16) 
     Me.State_Combo.Value = NC_C_L.Cells(nRow, 17) 
     Me.Zip_Text.Value = NC_C_L.Cells(nRow, 18) 
     Me.EMail_Text.Value = NC_C_L.Cells(nRow, 19) 
     Me.P_Name_Text.Value = NC_C_L.Cells(nRow, 20) 
     Me.P_PhoneNumber_Text.Value = NC_C_L.Cells(nRow, 21) 
     Me.P_Address_Text.Value = NC_C_L.Cells(nRow, 22) 
    End Sub 

(я сделал изменить некоторые из имен, чтобы отразить ***.)

+1

Что '' ***? – BruceWayne

+1

У вас есть код, который * читает * из листа 'NC_C_L' (что бы это ни значило). Если вы хотите «обновить» содержимое этого листа, вам понадобится код, который * пишет * к нему. Это очень похоже на чтение, за исключением того, что вы переворачиваете направление задания, например. 'NC_C_L.Cells (nRow, 22) = Me.P_Address_Text.Value'. Это то, о чем вы спрашиваете? –

+0

Я изменил некоторые из моих фактических текстов, чтобы отразить *** только для конфиденциальности/безопасности и т. Д. –

ответ

0

Обычно вы увидите два отдельных методов.

Method1: Передача данных в диапазон управления формы:

Private Sub TraverseDataToForm(nRow As Long) 
     Me.***_Text.Value = NC_C_L.Cells(nRow, 1).Value 
     Me.***_Box.Value = NC_C_L.Cells(nRow, 2).Value 
End sub 

Method2: Пересылка данных из элементов управления в диапазоне:

Private Sub TraverseDataToRange(nRow As Long) 
     NC_C_L.Cells(nRow, 1).Value = Me.***_Text.Value 
     NC_C_L.Cells(nRow, 2).Value = Me.***_Box.Value 
End sub 

SyncValues ​​соединит диапазон до MSForms.Control. ControlSource и обновите значения при изменении записи.

Примечание. Вам также необходимо инициировать обновление значений, когда пользовательская форма закрывается.


Sub SyncValues(ctrl As MSForms.Control, Target As Range) 

    If ctrl.ControlSource <> "" Then 
     Range(ctrl.ControlSource).Value = ctrl.Value 
    End If 

    If Not Target Is Nothing Then 
     ctrl.ControlSource = Target.Address(True, True, xlA1, True) 
    End If 
End Sub 

Private Sub UserForm_Deactivate() 
    TraverseData nCurrentRow 
End Sub 

Private Sub Next_Command_Click() 
    Do 
     nCurrentRow = nCurrentRow + 1 
     TraverseData nCurrentRow 
    Loop Until NC_C_L.Cells(nCurrentRow, 1).Value = "" Or NC_C_L.Cells(nCurrentRow, 1).Value = Me.AAA_Text.Value 
End Sub 

Private Sub Previous_Command_Click() 
    Do 
     nCurrentRow = nCurrentRow - 1 
     TraverseData nCurrentRow 
    Loop Until nCurrentRow = 1 Or NC_C_L.Cells(nCurrentRow, 1).Value = Me.AAA_Text.Value 
End Sub 

Private Sub TraverseData(nRow As Long) 
    If nRow = 0 Then Exit Sub 
    SyncValues Me.AAA_Text, NC_C_L.Cells(nRow, 1) 
    SyncValues Me.BBB_Box, NC_C_L.Cells(nRow, 2) 
    SyncValues Me.CCC_Combo, NC_C_L.Cells(nRow, 3) 
    SyncValues Me.DDD_Combo, NC_C_L.Cells(nRow, 4) 
    SyncValues Me.EEE_Combo, NC_C_L.Cells(nRow, 5) 
    SyncValues Me.FFF_Combo, NC_C_L.Cells(nRow, 6) 
    SyncValues Me.GGG_Combo, NC_C_L.Cells(nRow, 7) 
    SyncValues Me.HHH_Text, NC_C_L.Cells(nRow, 8) 
    SyncValues Me.III_Text, NC_C_L.Cells(nRow, 9) 
    SyncValues Me.Comments1_Text, NC_C_L.Cells(nRow, 10) 
    SyncValues Me.Comments2_Text, NC_C_L.Cells(nRow, 11) 
    SyncValues Me.Comments3_Text, NC_C_L.Cells(nRow, 12) 
    SyncValues Me.PhoneNumber_Text, NC_C_L.Cells(nRow, 13) 
    SyncValues Me.Address1_Text, NC_C_L.Cells(nRow, 14) 
    SyncValues Me.Address2_Text, NC_C_L.Cells(nRow, 15) 
    SyncValues Me.City_Text, NC_C_L.Cells(nRow, 16) 
    SyncValues Me.State_Combo, NC_C_L.Cells(nRow, 17) 
    SyncValues Me.Zip_Text, NC_C_L.Cells(nRow, 18) 
    SyncValues Me.EMail_Text, NC_C_L.Cells(nRow, 19) 
    SyncValues Me.P_Name_Text, NC_C_L.Cells(nRow, 20) 
    SyncValues Me.P_PhoneNumber_Text, NC_C_L.Cells(nRow, 21) 
    SyncValues Me.P_Address_Text, NC_C_L.Cells(nRow, 22) 
End Sub 
Смежные вопросы