You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 03:45:04