微软访问 VBA

Posted

技术标签:

【中文标题】微软访问 VBA【英文标题】:Microsoft Access VBA 【发布时间】:2020-07-22 15:45:52 【问题描述】:

错误状态:

Run-time error '94'
Invalid use of Null

选项:(结束)(调试)(帮助)

我点击调试

Microsoft Visual Basic for Applications 打开窗口 (计算函数代码)

(下面的问题)

'Add Leap Year determination
    Dim blnIsLeapYear As Boolean
    Dim intYear As Integer
    blnIsLeapYear = False
    intYear = YY
    If (intYear Mod 4 = 0) Then
        blnIsLeapYear = True
        If (intYear Mod 100 = 0) Then
            If (intYear Mod 400 <> 0) Then
                blnIsLeapYear = False

IntYear = YY 以黄色突出显示。我不知道如何解决这个问题。

【问题讨论】:

YY应该是什么?它目前为空 - error 94 【参考方案1】:

您的代码中缺少“End if”。

记住 if 结构是:

如果有的话 做你需要的 如果结束。

例如:

If (intYear Mod 4 = 0) Then 
    blnIsLeapYear = True
End if

另一个问题是您在 intYear = YY 中将 YY 分配给 intYear,但您从未创建填充 YY。

【讨论】:

我们可能只看到一小部分代码。如果未定义 YY,则不会引发运行时错误 94。仅当 YY 包含 null(通常来自数据库查询的值)时才会发生这种情况。 如果 YY 是一个未声明的变量,VBA 会将其视为一个空变量,然后对应于触发错误的行中的 Null,IntYear = YY。由于 intYear 被声明为 As Integer,它不能接受 Null ... 导致 “无效使用 Null” 投诉。【参考方案2】:

放很重要 每个模块顶部的选项显式。 每当您使用尚未声明的变量时,这就是标志。 就像您所做的那样,每个变量中至少有一个大写字母是个好主意。 这样,当您进入该行时,您将立即知道您是否在离开该行时正确拼写了每个变量。 我总是在所有大写字母中命名全局变量-例如 Public Dim YEARPAST as Long 或 Const YEARPAST 为 Long = 1 然后我知道有些东西是全球性的 我知道很多编码人员认为全局变量是一个坏主意,但它们对我有用,无论是在项目级别还是在特定模块中,所以我不必一直在变量中传递值。此外,这是一种在模块中的项目或过程之间交流信息的好方法。

【讨论】:

您认识到段落和其他格式选项的发明以提高可读性;)建议Option Explicit 是一个非常好的主意,但始终提供有用的链接(例如riptutorial.com 是一个很好的来源)。有经验的用户也有理由警告不必要的全局变量,因为您可能会遭受奇怪的副作用。始终使用尽可能小的范围!懒惰地设置 vars 是一个非常糟糕的习惯,通常会导致更多的工作来消除由此产生的缺陷(命名也是如此)。 真的不是在寻找风格上的 cmets 的建议。只需在这些板上添加您的额外信息(例如明确的参考)就足够了。

以上是关于微软访问 VBA的主要内容,如果未能解决你的问题,请参考以下文章

将名称添加到日期范围搜索。微软访问 VBA

微软访问编辑宏

当表单中的任何文本框发生更改时运行函数?微软访问

excel中的vba是啥意思,如何用

没有 Python,微软宣布 Excel 新增 JavaScript 支持

微软:要不将 Python弄成Excel官方脚本语言?