如何修复MS Access VBA开发中出现的运行时错误2185
错误根因
Access 运行时错误2185的触发条件为:引用未获得焦点的控件的.Text属性。
你代码中读取控件内容时全部使用了.Text属性,该属性仅在控件处于激活(聚焦)状态时可正常访问,非激活状态访问就会抛出2185错误。
因为不同数据库条目加载时,当前页面聚焦的控件并不固定,所以仅在对应控件未被聚焦的条目上会触发报错,其余场景下运行正常,符合你描述的偶发错误特征。
修复方案
把所有控件的.Text属性替换为.Value属性即可:
.Value是Access控件的默认属性,无论控件是否获得焦点都可以正常读取,返回值和控件激活状态下的.Text属性完全一致- 额外可以用
Nz()函数包裹控件值,避免控件为空时拼接字符串直接返回Null,提高代码稳定性
修正后的代码如下:
Private Sub Detail_Print(Cancel As Integer, PrintCount As Integer) Dim RowCount As Long Dim ColCount As Long Dim Message As String Dim EncodedMsg As String ' 替换.Text为.Value,用Nz处理空值 Message = Nz(DrivingInitialSurname.Value, "") Message = Message & vbCrLf & Nz(Text93.Value, "") Message = Message & vbCrLf & Nz(DrivingDateIssue.Value, "") Message = Message & vbCrLf & Nz(Text161.Value, "") ' encode string using QRCode Call QRCodeEncode(Message, Version, Level, Mask) ' how many rows? RowCount = QRCodeGetRows() ' how many characters in one row? ColCount = QRCodeGetCols() EncodedMsg = vbCrLf For I = 1 To RowCount For J = 1 To ColCount EncodedMsg = EncodedMsg & Chr(QRCodeGetCharAt(I - 1, J - 1)) Next J EncodedMsg = EncodedMsg & vbCrLf Next I txtQRCode.Value = EncodedMsg End Sub
内容的提问来源于stack exchange,提问作者Douglas
相关产品推荐
相关产品推荐

