Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
vba的单个子/函数中可以使用多少个变量?_Vba_Excel - Fatal编程技术网

vba的单个子/函数中可以使用多少个变量?

vba的单个子/函数中可以使用多少个变量?,vba,excel,Vba,Excel,我构建了一个简单的函数,但它需要大约11-12个具有相同整数类型的变量。每次我尝试使用10个以上的变量时,第一个变量经常出错,而其他变量的计算是正确的。如果我把变量的数量减少到10,它们都是正确的。 这是否意味着vba一次只能存储10个相同类型的变量?或者这是我电脑的限制:)) 这是我的代码,btb返回错误的值,而其他值是正确的,但是如果我删除变量“a”和所有与它相关的代码,那么btb返回正确 Sub regionCount() Dim btb, dbb, hn, ntb, dnb, tnbBS

我构建了一个简单的函数,但它需要大约11-12个具有相同整数类型的变量。每次我尝试使用10个以上的变量时,第一个变量经常出错,而其他变量的计算是正确的。如果我把变量的数量减少到10,它们都是正确的。 这是否意味着vba一次只能存储10个相同类型的变量?或者这是我电脑的限制:))

这是我的代码,btb返回错误的值,而其他值是正确的,但是如果我删除变量“a”和所有与它相关的代码,那么btb返回正确

Sub regionCount()
Dim btb, dbb, hn, ntb, dnb, tnbBS, tnbNS, hcm1, hcm2, hcm3, a As Integer

btb = dbb = hn = dnb = tnbBS = tnbNS = hcm1 = hcm2 = hcm3 = a = 0

For Each mycell In Worksheets(1).Range("E2:E382")
    If mycell.Value = "Khu vuc Bac Trung Bo" Then
        btb = btb + 1
    ElseIf mycell.Value = "Khu vuc Dong Bac Bo" Then
        dbb = dbb + 1
    ElseIf mycell.Value = "Khu vuc Ha Noi" Then
        hn = hn + 1
    ElseIf mycell.Value = "Khu vuc Nam Trung Bo" Then
        ntb = ntb + 1
    ElseIf mycell.Value = "Khu vuc Dong Nam Bo" Then
        dnb = dnb + 1
    ElseIf mycell.Value = "Khu vuc Tay Nam Bo  - Bac song hau" Then
        tnbBS = tnbBS + 1
    ElseIf mycell.Value = "Khu vuc Tay Nam Bo  - Nam song hau" Then
        tnbNS = tnbNS + 1
    ElseIf mycell.Value = "Khu vuc TPHCM_1" Then
        hcm1 = hcm1 + 1
    ElseIf mycell.Value = "Khu vuc TPHCM_2" Then
        hcm2 = hcm2 + 1
    ElseIf mycell.Value = "Khu vuc TPHCM_3" Then
        hcm3 = hcm3 + 1
    ElseIf mycell.Value = "-- None --" Then
        a = a + 1
    End If
Next mycell

Range("C5").Value = btb
Range("d5").Value = dbb
Range("e5").Value = hn
Range("f5").Value = ntb
Range("g5").Value = dnb
Range("h5").Value = tnbBS
Range("i5").Value = tnbNS
Range("j5").Value = hcm1
Range("k5").Value = hcm2
Range("l5").Value = hcm3
Range("m5").Value = a
端接头

单个项目最多可包含32000个“标识符”(任何 非送达关键字),包括但不限于表单, 控件、模块、变量、常量、过程、函数和 物体。请注意,标识符的实际数量仅限于 可用内存

Visual Basic中的变量名称不能超过255个字符, 窗体、控件、模块和类的名称不能为空 超过40个字符。VisualBasic对实际的 项目中不同对象的数量

代码限制

可以加载到窗体、类或标准中的代码量 模块限制为65534行。一行代码可以由 最多为1023字节。实际值前最多可以有256个空格 文本在一行上,且不超过二十四行的续行 字符(\)可以包含在单个逻辑行中

过程、类型和变量在数量上没有限制 每个模块的程序。每个过程最多可包含64K代码。 如果过程或模块超过此限制,Visual Basic将生成 编译时错误。如果遇到此错误,可以通过以下方法避免 将非常大的程序分解为几个较小的程序, 或者将模块级声明移动到另一个模块中

Visual Basic使用表存储标识符(变量、, 过程、常量等)在代码中。每张桌子有限 到64K

DLL声明表每个表单和代码模块使用一个包含 描述DLL入口点的结构。每个结构使用 大约40个字节,总限制大小为64K,因此 每个模块大约允许1500次声明

项目名称表整个应用程序使用一个表 包含所有名称。这些措施包括:

固定名称

变量名

用户定义-类型定义名称

模块名称

DLL过程声明名称项目名称表不受限制 在总大小中,但限制为总共32K个区分大小写的唯一 条目。如果达到限制,请在中重用专用标识符 不同的模块将唯一条目的数量限制为32K

在不同模块中导入对标识符的每个引用 在导入表中创建一个条目。每个此类条目至少包含 24个字节,限制为64K,大约产生2000个字节 每个模块的参考资料

模块条目表此表每个模块最多可接受125字节, 总限制为64K,因此每个项目大约有400个模块

以下限制适用于Visual Basic中的变量 语言

表单、标准和类模块数据—数据段(即 任何类型的VBA模块的声明部分中定义的数据 Visual Basic中的窗体或模块最多可为64K。这个数据段 包含以下数据:

使用Static声明的局部变量

除数组和可变长度字符串之外的模块级变量

每个模块级数组和可变长度字符串4个字节。 过程、类型和变量(如果过程或模块超出 64K代码限制,Visual Basic生成编译时错误

如果定义的过程包含超过64K的局部变量 定义后,会出现错误“本地非静态变量太多”

如果定义的模块级别超过64K 已定义变量,或者如果您定义的用户定义类型大于 64K,出现错误“固定或静态数据不能大于 64K。”

如果遇到此错误,可以通过中断 大程序转换成几个小程序,或通过移动 将模块级声明转换为另一个模块

声明为变量的数组不会影响整个大小 阵列的性能;只有数组描述符朝64K限制计数。 因此,例如,可以使用Dim这样的声明 x(1000000)作为过程或模块级的字节。从…里面 但是,如果声明了较大的固定大小,则会出现内存问题 数组,然后将这些记录的实例声明为 变量

用户定义类型用户定义类型的变量不能超过64K, 虽然用户定义类型中可变长度字符串的总和可能 超过64K(可变长度字符串在数据集中仅占用4个字节) 用户定义的类型;存储字符串的实际内容 分别)。用户定义的类型可以根据其他类型定义 用户定义的类型,但类型的总大小不能超过64K

过程中的堆栈空间参数和局部变量占用堆栈空间 运行时的空间。模块级和静态变量不占用空间 堆栈空间,因为它们是在表单的数据段中分配的 或模块。您调用的任何DLL过程在运行时都会使用此堆栈 执行

VisualBasic本身将一些堆栈用于自己的目的,例如 在计算表达式时存储中间值

总可用堆栈大小
btb = dbb = hn = dnb = tnbBS = tnbNS = hcm1 = hcm2 = hcm3 = a = 0
btb = 0
dbb = 0
hn = 0
dnb = 0
tnbBS = 0
tnbNS = 0
hcm1 = 0
hcm2 = 0
hcm3 = 0
a = 0
a = b = c
a = (b = c)
Dim btb, dbb, hn, ntb, dnb, tnbBS, tnbNS, hcm1, hcm2, hcm3, a As Integer
Dim btb As Variant, dbb As Variant, hn As Variant, ntb As Variant, dnb As Variant, _
    tnbBS As Variant, tnbNS As Variant, hcm1 As Variant, hcm2 As Variant, _
    hcm3 As Variant, a As Integer
Dim btb As Integer, dbb As Integer, hn As Integer, ntb As Integer, dnb As Integer, _
    tnbBS As Integer, tnbNS As Integer, hcm1 As Integer, hcm2 As Integer, _
    hcm3 As Integer, a As Integer
Dim btb, dbb, hn, ntb, dnb, tnbBS, tnbNS, hcm1, hcm2, hcm3, a As Integer
Dim btb As Integer, dbb As Integer, hn As Integer, ntb As Integer, dnb As Integer, tnbBS As Integer, tnbNS As Integer, hcm1 As Integer, hcm2 As Integer, hcm3 As Integer, a As Integer
btb = dbb = hn = dnb = tnbBS = tnbNS = hcm1 = hcm2 = hcm3 = a = 0
dbb = hn = dnb = tnbBS = tnbNS = hcm1 = hcm2 = hcm3 = a = 0