如何使用爆炸运算符解决访问vba代码的问题

问题描述

我正在访问表单中使用下一个代码,该代码运行良好:

 Set db = CurrentDb
 Set rs = db.OpenRecordset("Bestandslocaties",dbOpenDynaset)
 With rs
     .AddNew
     ![Omschrijving] = OmschrijvingBestand
     .Update
 End With

我使用Rubberduck代码检查来发现代码质量问题。 它给出了上述代码的问题:'表达式“![Omschrijving]”(第5行)使用了递归bang运算符。如果参数化的默认成员不在对象本身上,并且只能通过首先调用无参数的默认成员才能到达,这将产生误导。 建议的解决方法是用显式访问替换爆炸符号:

.Fields().Item("[Omschrijving]") = OmschrijvingBestand 

但是随后Rubberduck报告了这一行:'表达式“ .Fields()”需要默认的成员访问,但是类型“ ACEDAO.DLL; DAO.Fields”没有合适的成员。 建议的解决方法是忽略此问题。

这真的是一个问题吗?如果是这样,除了忽略之外,如何解决此问题。

解决方法

通常显式访问该字段的重写是:

.Fields("Omschrijving") = OmschrijvingBestand

或者:

  1. 保持不变(代码可以正常工作,如果它没有损坏,请不要修复)。的确,除非您想学习或想要为项目实施特定的代码风格,否则这是首选。

  2. 完全显示(不要隐式访问.Value)

     .Fields("Omschrijving").Value = OmschrijvingBestand
    

请注意,括号不是字段名称的一部分,因此,如果您使用.而不是!,则不应该将其包括在内。

Rubberduck建议进行一次奇怪的重写,因为它不知道除了先获取整个集合然后再访问成员之外,您还可以立即访问该成员。

,

属性必须使用以下语法指定:

![Omschrijving].Value = OmschrijvingBestand

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...