如何编辑我的用户表单代码以允许更改更新
How to edit my userform code to allow for changes to update
我正在开发一个 Excel 用户表单,除了一个代码外,所有代码都可以正常工作。我将附上下面的代码,但我希望这是一个简单的修复。正如您在我的代码中看到的那样,当用户输入出发时间和到达时间时,数据将进入我的数据库并执行计算,然后将这些计算发送回我的用户表单复选框。虽然这是根据需要工作的,但我发现如果用户在离开用户表单之前的某个时间进行了更改,则信息会在我的数据库中适当更新,但用户表单复选框不会更新。有人可以告诉我我需要做什么,如果有的话,让这些实时工作并改变我的数据库文件吗?
Private Sub txtDepartTime_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'When time is entered, time transfers immediately to spreadsheet time calculations datafield.
Dim TargetRow As Long
TargetRow = Sheets("Codes").Range("D43").Value + 1
If Not txtDepartTime Like "##:## [ap]m" Then
MsgBox "Time entered is not valid. Please enter time as hh:mm am/pm.", vbExclamation
Cancel = True
Exit Sub
End If
With Sheets("Travel Expense Voucher").Range("Data_Start").Offset(TargetRow, 25)
.Value = TimeValue(txtDepartTime)
.NumberFormat = "hh:mm" 'departure time for checkbox calculation
End With
End Sub
Private Sub txtArrivalTime_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'When time is entered, time transfers immediately to spreadsheet datafield and sends back to userform which meals are allowed.
Dim TargetRow As Long
TargetRow = Sheets("Codes").Range("D43").Value + 1
If Not txtArrivalTime Like "##:## [ap]m" Then
MsgBox "Time entered is not valid. Please enter time as hh:mm am/pm.", vbExclamation
Cancel = True
Exit Sub
End If
With Sheets("Travel Expense Voucher").Range("Data_Start").Offset(TargetRow, 26)
.Value = TimeValue(txtArrivalTime)
.NumberFormat = "hh:mm" 'arrival time for checkbox calculation
End With
'''MEALS ALLOWED PER SPREADSHEET TO USERFORM'''
With Me.chkMorning
If Sheets("Travel Expense Voucher").Range("Data_Start").Offset(TargetRow, 28).Value = "T" Then
.Value = Checked
Else
.Value = Unchecked
.Enabled = False
End If
End With
With Me.chkMidday
If Sheets("Travel Expense Voucher").Range("Data_Start").Offset(TargetRow, 30).Value = "T" Then
.Value = Checked
Else
.Value = Unchecked
.Enabled = False
End If
End With
With Me.chkEvening
If Sheets("Travel Expense Voucher").Range("Data_Start").Offset(TargetRow, 32).Value = "T" Then
.Value = Checked
Else
.Value = Unchecked
.Enabled = False
End If
End With
'''END MOVEMENT OF MEALS ALLOWED TO USERFORM'''
End Sub
您的代码禁用了复选框但没有重新启用它们。一旦禁用,它们的值就无法重置。我建议使用此代码而不是您拥有的代码。
Dim Check As Boolean
Check = (Sheets("Travel Expense Voucher").Range("Data_Start").Offset(TargetRow, 28).Value = "T")
With chkMorning
.Enabled = vbTrue
.Value = Abs(Check)
.Enabled = .Value
End With
现在,引用作品sheet 中的特定单元格通过哪种方法接收到值"T",或者没有,我不知道。我已经建议研究排序。鉴于对时间所做的更改会影响正在为复选框测试的单元格,该更改只能在 Excel 重新计算工作时生效 sheet 而 VBA 是 运行 你的用户表单。这个我不知道。因此我不会在此基础上构建。
基本方案是 - 或者应该是 - 在表单打开(初始化)时将数据读入表单,在用户查看表单时添加、修改或操作表单中的这些数据,然后交回额外的,当用户完成(使用表单)时,修改或操作数据到 sheet。您的概念不遵循此方案。因此它会产生你不应该面对的问题。
我正在开发一个 Excel 用户表单,除了一个代码外,所有代码都可以正常工作。我将附上下面的代码,但我希望这是一个简单的修复。正如您在我的代码中看到的那样,当用户输入出发时间和到达时间时,数据将进入我的数据库并执行计算,然后将这些计算发送回我的用户表单复选框。虽然这是根据需要工作的,但我发现如果用户在离开用户表单之前的某个时间进行了更改,则信息会在我的数据库中适当更新,但用户表单复选框不会更新。有人可以告诉我我需要做什么,如果有的话,让这些实时工作并改变我的数据库文件吗?
Private Sub txtDepartTime_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'When time is entered, time transfers immediately to spreadsheet time calculations datafield.
Dim TargetRow As Long
TargetRow = Sheets("Codes").Range("D43").Value + 1
If Not txtDepartTime Like "##:## [ap]m" Then
MsgBox "Time entered is not valid. Please enter time as hh:mm am/pm.", vbExclamation
Cancel = True
Exit Sub
End If
With Sheets("Travel Expense Voucher").Range("Data_Start").Offset(TargetRow, 25)
.Value = TimeValue(txtDepartTime)
.NumberFormat = "hh:mm" 'departure time for checkbox calculation
End With
End Sub
Private Sub txtArrivalTime_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'When time is entered, time transfers immediately to spreadsheet datafield and sends back to userform which meals are allowed.
Dim TargetRow As Long
TargetRow = Sheets("Codes").Range("D43").Value + 1
If Not txtArrivalTime Like "##:## [ap]m" Then
MsgBox "Time entered is not valid. Please enter time as hh:mm am/pm.", vbExclamation
Cancel = True
Exit Sub
End If
With Sheets("Travel Expense Voucher").Range("Data_Start").Offset(TargetRow, 26)
.Value = TimeValue(txtArrivalTime)
.NumberFormat = "hh:mm" 'arrival time for checkbox calculation
End With
'''MEALS ALLOWED PER SPREADSHEET TO USERFORM'''
With Me.chkMorning
If Sheets("Travel Expense Voucher").Range("Data_Start").Offset(TargetRow, 28).Value = "T" Then
.Value = Checked
Else
.Value = Unchecked
.Enabled = False
End If
End With
With Me.chkMidday
If Sheets("Travel Expense Voucher").Range("Data_Start").Offset(TargetRow, 30).Value = "T" Then
.Value = Checked
Else
.Value = Unchecked
.Enabled = False
End If
End With
With Me.chkEvening
If Sheets("Travel Expense Voucher").Range("Data_Start").Offset(TargetRow, 32).Value = "T" Then
.Value = Checked
Else
.Value = Unchecked
.Enabled = False
End If
End With
'''END MOVEMENT OF MEALS ALLOWED TO USERFORM'''
End Sub
您的代码禁用了复选框但没有重新启用它们。一旦禁用,它们的值就无法重置。我建议使用此代码而不是您拥有的代码。
Dim Check As Boolean
Check = (Sheets("Travel Expense Voucher").Range("Data_Start").Offset(TargetRow, 28).Value = "T")
With chkMorning
.Enabled = vbTrue
.Value = Abs(Check)
.Enabled = .Value
End With
现在,引用作品sheet 中的特定单元格通过哪种方法接收到值"T",或者没有,我不知道。我已经建议研究排序。鉴于对时间所做的更改会影响正在为复选框测试的单元格,该更改只能在 Excel 重新计算工作时生效 sheet 而 VBA 是 运行 你的用户表单。这个我不知道。因此我不会在此基础上构建。
基本方案是 - 或者应该是 - 在表单打开(初始化)时将数据读入表单,在用户查看表单时添加、修改或操作表单中的这些数据,然后交回额外的,当用户完成(使用表单)时,修改或操作数据到 sheet。您的概念不遵循此方案。因此它会产生你不应该面对的问题。