为学校做一个项目,我可以将数据读入我的表单,但我似乎无法从我的表单更新,然后转到新记录。有人可以帮忙。
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
(我确实修改了一些名字以反映***。)
答案 0 :(得分:0)
通常,您会看到两种不同的方法。
方法1:将范围数据传输到表单控件:
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
方法2:将控件数据传输到范围:
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会将Range链接到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