gpt4 book ai didi

excel - 这个 VBA 代码有什么问题?

转载 作者:行者123 更新时间:2023-12-04 20:41:15 24 4
gpt4 key购买 nike

Sub variable()
Dim data As Integer
Dim square As Integer
Dim num As String
End Sub

Private Sub CommandButton1_Click()
num = InputBox("Give me the number!", "Your number")
data = CInt(num)
End Sub

Private Sub CommandButton2_Click()
square = (data ^ 2)
MsgBox ("The result: " & square)
End Sub

有人可以帮我吗?谢谢。
结果不是正确的数字。那一直是0。

最佳答案

代码有两个问题:您不需要变量声明,并且您的变量范围与您预期的不同。

在 Visual Basic 编辑器中,选择 Tools - Options 并选中 Require Variable Declaration。这将自动包括 Option Explicit在任何新模块的顶部。不幸的是,对于现有模块,您必须输入 Option Explicit自己在顶部。

如果您需要变量声明,编译器会在您使用不在范围内的变量时告诉您。它会告诉你(在你的例子中)Variable not defined并突出显示 num (因为它是第一个)。这将帮助您在 future 识别这些类型的问题。

显然你打算声明你的变量,你只是没有在正确的地方声明它们。您的变量可以具有三个范围:本地、模块、全局。您总是希望使用适合您的代码的最小范围。所以使用本地,除非你需要使用模块。除非绝对必要,否则使用模块。以下是作用域的工作原理:

本地 - 使用 Dim在一个过程中(SubEnd Sub 或等价物之间)。该过程之外的任何东西都无法看到或更改该变量。

模块 - 使用 Private (Dim 也有效)在模块顶部,在任何过程之外。现在该模块中的所有程序都可以看到和使用该变量。其他模块中的程序不能。

全局 - 使用 Public (Global 也适用)位于标准模块(不是类模块,如 ThisWorkbook、Sheet1、Userform1 或 Class1)的顶部。您项目中的每个过程都可以查看和设置此变量。

对于您的情况,您应该使用模块范围的变量。您的事件潜艇在同一个模块中,它们是唯一使用这些变量的潜艇。如果模块外部的过程需要使用该变量,您可能需要将其移至标准模块并使用 Public 声明它。 .但这是最后的手段。还有其他选项,例如将变量作为参数传递,比使用全局范围变量更好。

还有两件事:如果您使用 Application.InputBox()您可以指定一个确保用户输入数字的类型。如果您想继续使用InputBox()函数,然后 CInt当用户键入任何无法强制为数字的内容时会出错。在这种情况下,请考虑使用 Val功能。

关于excel - 这个 VBA 代码有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32977723/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com