烦人的vba命名行为

时间:2011-05-03 15:57:54

标签: ms-access vba ms-access-2007

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

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

Sub sub1()
    Msgbox Err.Description
End Sub

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

Sub sub2(Description as String)
    Msgbox Description
End Sub

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

Sub sub2(description as String)
    Msgbox description
End Sub

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

Sub sub1()
    Msgbox Err.description
End Sub

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

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

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

2 个答案:

答案 0 :(得分:7)

对不起。这是VBA的硬编码“功能”。在此处查看类似问题:How does one restore default case to a variable in VBA (Excel 2010)?

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

  1. 使用vba代码扩展名恢复所有已修改的文件(创建备份.orig文件)
  2. 对.orig文件与对应文件进行不区分大小写的比较
  3. 如果没有更改(在案例更改之外),请删除.orig文件
  4. 对于剩余的.orig文件(具有实际更改的文件)删除对应文件并删除.orig扩展名
  5. 这样做有效地隐藏了只对案例进行修改的文件(当您遇到VBA文件时,这是一个常见的问题)。它不会隐藏已对其进行其他修改的文件中的大小写更改。它远非一个完美的解决方案,但它是我提出的最佳解决方案。

答案 1 :(得分:0)

另外请记住,在VBA中,变量名称不区分大小写。因此,描述和描述在相同的范围内是相同的。