烦人的vba命名行为

Dav*_*vid 8 ms-access vba ms-access-2007

我正在使用Access 2007,可以按如下方式复制此行为.

1)创建新的访问数据库accdb文件.
2)打开数据库并创建新的vba模块.
3)创建第一个子程序sub1:

Sub sub1()
    Msgbox Err.Description
End Sub
Run Code Online (Sandbox Code Playgroud)

4)创建第二个子程序sub2:

Sub sub2(Description as String)
    Msgbox Description
End Sub
Run Code Online (Sandbox Code Playgroud)

此时一切正常.
5)但是如果我去改变sub2以便'Description'读取'description',即将'D'改为'd',如下所示:

Sub sub2(description as String)
    Msgbox description
End Sub
Run Code Online (Sandbox Code Playgroud)

这也有连锁效应,也改变了sub1!所以sub1现在读取:

Sub sub1()
    Msgbox Err.description
End Sub
Run Code Online (Sandbox Code Playgroud)

为什么'Err.Description'改为'Err.description'?

这种行为似乎对代码的实际功能没有影响,所以没有问题.我遇到的一个大问题是我将我的vba模块导出为文本文件并将它们置于SVN控制之下.最近,由于这个原因,已经将大量无意义的"更改"提交到存储库.

关于如何阻止这种情况发生的任何想法?

mwo*_*e02 7

抱歉.这是VBA的硬编码"功能".在此处查看类似问题:如何在VBA中将默认情况恢复为变量(Excel 2010)?

我使用源代码控制解决的方法是通过执行以下操作的脚本运行我的存储库:

  1. 使用vba代码扩展还原所有已修改的文件(创建备份.orig文件)
  2. 对.orig文件进行不区分大小写的比较
  3. 如果没有更改(在案例更改之外),请删除.orig文件
  4. 对于剩余的.orig文件(具有实际更改的文件),删除对应文件并删除.orig扩展名

这样做有效地隐藏了只对案例进行唯一更改的文件(当您遇到VBA文件时,这是一个常见的问题).它不会隐藏已对其进行其他修改的文件中的大小写更改.它远非一个完美的解决方案,但它是我提出的最好的解决方案.