首页 > 解决方案 > 设置一个独立于执行模块的常量

问题描述

我尝试设置一个常量,它应该包含我的数据库的连接字符串。但是我的宏的设置是这样的,在我的 Excel 的第一个工作表上有很多按钮。根据用户单击哪个按钮,另一个模块会被执行,但它们都会在某个时候连接到同一个数据库。

由于我不想在许多不同的点更改连接字符串,因此应该使用一个常量来完成。

但我永远无法判断哪个模块被执行,哪个没有。

因此我创建了一个只包含一行代码的新模块:

Public Const ConnectionString As String = "Driver={MySQL ODBC 8.0 Unicode Driver};Server=localhost;Database=X;User=root;Password=X;"

不幸的是,当单击按钮并执行某些模块/子时,变量“ConnectionString”不包含任何值。

如何确保设置常量与调用的子/模块无关?

标签: excelvba

解决方案


Public必须在所有上下文(模块、类、控件、表单等)中使用常量,但以下两种情况除外:

一种。Option Private Module已生效;

湾。该常量也已在模块/过程 ( Dim ConnectionString As String) 中声明,但未分配任何值。如果在声明之后,将分配一个值 ( ConnectionString = "xxx"),则 VBA 将返回“xxx”。所以在所有项目中寻找ConnectionString As String,我认为真正问题的地方会被发现。

但至少部分功劳必须归功于@BrakNicku,他首先讨论了第二种可能性......


推荐阅读