如何解决 bang 运算符的访问 vba 代码问题

How to solve an access vba code issue with bang operator

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

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

我使用 Rubberduck 代码检查来发现代码质量问题。 它给出的关于上述代码的问题:'The expression "![Omschrijving]" (line 5) uses a recursive bang operator. This is misleading if the parameterized default member is not on the object itself and can only be reached by calling the parameterless default member first.' 建议的修复是用显式访问替换 bang 符号:

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

但是 Rubberduck 报告了这一行:'The expression ".Fields()" requires a default member access, but the type "ACEDAO.DLL;DAO.Fields" does not have a suitable member.' 建议的解决方法是忽略此问题。

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

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

.Fields("Omschrijving") = OmschrijvingBestand

或者:

  1. 保持不变(代码有效,如果它没有损坏,请不要修复它)。真的,这就是 go-to 除非你想学习或想为项目强制执行特定的代码风格。

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

     .Fields("Omschrijving").Value = OmschrijvingBestand
    

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

Rubberduck 建议一个奇怪的重写,因为它不知道不是先获取整个集合,然后访问一个成员,而是直接访问该成员。

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

![Omschrijving].Value = OmschrijvingBestand