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

Min*_* Ha 2 excel vba excel-vba

我已经构建了一个简单的函数,但它需要大约11-12个具有相同整数类型的变量.每次我尝试使用超过10个变量时,第一个变量经常出错,而其他变量被正确计算.如果我将变量数减少到10,那么它们都是正确的.这是否意味着hat 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
Run Code Online (Sandbox Code Playgroud)

结束子

Yow*_*E3K 5

你的陈述

btb = dbb = hn = dnb = tnbBS = tnbNS = hcm1 = hcm2 = hcm3 = a = 0
Run Code Online (Sandbox Code Playgroud)

应该

btb = 0
dbb = 0
hn = 0
dnb = 0
tnbBS = 0
tnbNS = 0
hcm1 = 0
hcm2 = 0
hcm3 = 0
a = 0
Run Code Online (Sandbox Code Playgroud)

考虑一下这句话

a = b = c
Run Code Online (Sandbox Code Playgroud)

这被解释为

a = (b = c)
Run Code Online (Sandbox Code Playgroud)

哪里(b = c)是逻辑表达式.因此,如果b是相同的值c(如果变量全部保留为默认初始化,0那么a它将被设置为)True(即-1)

你的语句布局方式会将最左边的值设置为-1(如果行中有奇数个变量)或者设置为0(如果你有偶数).


还应该指出的是

Dim btb, dbb, hn, ntb, dnb, tnbBS, tnbNS, hcm1, hcm2, hcm3, a As Integer
Run Code Online (Sandbox Code Playgroud)

相当于

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
Run Code Online (Sandbox Code Playgroud)

它不一样

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
Run Code Online (Sandbox Code Playgroud)