excel - 如何编辑我的用户表单代码以允许更改更新
问题描述
我正在处理一个 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
现在,引用工作表中的特定单元格通过哪种方法接收值“T”,或者没有,我无法判断。我已经建议研究测序。鉴于对时间所做的更改会影响正在测试复选框的单元格,因此只有当 Excel 在 VBA 运行您的用户窗体时重新计算工作表时,该更改才会生效。这个我不知道。因此我不会建立在它之上。
基本方案是——或者应该是——在表单打开(初始化)时将数据读入表单,在用户查看表单时添加、修改或操作这些数据,并将附加、修改或操作的数据交还给用户完成后的工作表(使用表单)。您的概念不遵循此方案。因此,它会产生您不应该面对的问题。
推荐阅读
- c++ - C ++为什么大写字母会影响与字符串的比较(排序名称)
- java - 添加 Spring Security 依赖项后 MATCH/DELETE 请求停止工作(一段时间后)
- linux - 从每个 bazel 测试中连接测试结果的方法?
- c# - C# 9 记录 XmlAttribute 序列化属性被忽略
- vb.net - 如何使用控件在组框中验证文本框
- python - 如何在 Python 中查找所有可能的字典值组合,这些组合在 Python 中加起来为某个数字,同时仍保留键名
- heroku - 如何使用 Next.js 和 Heroku 管理错误 R14(超出内存配额)?
- sql - 嵌套 where 语句
- ruby-on-rails - 如何使用 ActiveSupport::Notifications 订阅所有查询方法
- javascript - Webpack 5 资产模块与 woff 文件有关