【问题标题】:Declaring constant in VBA from a INI file从 INI 文件在 VBA 中声明常量
【发布时间】:2012-09-26 16:39:26
【问题描述】:

我在 VBA 模块中有一些 const,但我想将它们放在一个 INI 文件中,因为我还有其他使用相同常量的应用程序。这有效:

Public Const PATH_DB As String = "\\server\folder\bdd.mdb"

但这不起作用:

Public Const PATH_DB As String = getFromIni("path","db","C:\config.ini")

Public Function getFromIni(ByVal strSectionName As String, ByVal strEntry As String, ByVal strIniPath As String) As String
    Dim x As Long
    Dim sSection As String, sEntry As String, sDefault As String
    Dim sRetBuf As String, iLenBuf As Integer, sFileName As String
    Dim sValue As String

    sSection = strSectionName
    sEntry = strEntry
    sDefault = ""
    sRetBuf = Strings.String$(256, 0) '256 null characters
    iLenBuf = Len(sRetBuf$)
    sFileName = strIniPath
    x = GetPrivateProfileString(sSection, sEntry, "", sRetBuf, iLenBuf, sFileName)
    sValue = Strings.Trim(Strings.Left$(sRetBuf, x))

    If sValue <> "" Then
        getFromIni = sValue
    Else
        getFromIni = vbNullChar
    End If
End Function
# C:\config.ini
[path]
db=\\server\folder\bdd.mdb

我的 getFromIni 函数实际上工作得很好,但当我想声明常量时却不行(它根本不编译)。我尝试了一个全局变量,但由于某种原因,它也不起作用,从同一个项目中的另一个表单使用时找不到该变量(它仅在它被声明为 const 时才有效,但我不能声明它从函数中获取值时作为 const)。

怎么了?

【问题讨论】:

  • 你不能用函数的结果定义一个常数,这与说 Public Const PATH_DB As String = myVar 没有什么不同。基本上,如果您想从文件中获取值,它们不再是常量

标签: vba scope global-variables constants


【解决方案1】:

您不能将函数调用指定为 CONST 字符串的值。我希望您在运行此程序时收到错误“需要常量表达式”。

【讨论】:

    【解决方案2】:

    改变

    Public Const PATH_DB As String = getFromIni("path","db","C:\config.ini")
    

    Public PATH_DB As String 
    

    将以下从 INI 文件中获取值的调用放在初始化方法中(比如数据库打开事件)

    PATH_DB = getFromIni("path","db","C:\config.ini")
    

    【讨论】:

    • 因此,即使在应用程序运行时它不会改变,也无法将其声明为常量。我会做更多的测试,因为公共字符串在我之前的测试中不起作用(我在变量的范围上遇到了一些问题)。改用global 关键字有什么优点/缺点?
    • 想想你在说什么——你立即在它的声明中改变了这个变量(它是“const”)。这是没有意义的,因为它会立即被重新定义。
    • @dnLL: const 要求在设计/编码时给出一个值。
    • 我的另一个问题的答案:stackoverflow.com/questions/3815547/…谢谢大家。
    猜你喜欢
    • 2013-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-13
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多