微软访问 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的主要内容,如果未能解决你的问题,请参考以下文章