在Visual Basic中声明数组大小

时间:2011-11-27 23:25:29

标签: arrays excel vba

这是我第一次使用VB。我大多习惯在matlab工作,并且发现我在matlab中认为理所当然的很多东西必须在VB中明确声明。令人沮丧!

特别是我需要声明两个数组大小s1和s2。正如您在下面的代码中看到的那样,s1是集合中的元素数量" n"变量" stratum"等于1. s2是集合中的元素数量" n"变量" stratum"等于2.非常简单。

我的方法是简单地将层次变量1到n循环并计算这些出现次数;然后将结果总和声明为常量。这可以在matlab中游泳,但VB不接受s1和s2作为常量。当我在循环之后插入debug.print命令时,它甚至不会显示s1和s2。

我查看了已经发布的相关帖子。我很感激任何建议。感谢。

    Sub TOAinput()

    Const n As Integer = 648

    Dim stratum(n), hybrid(n), acres(n), hhsz(n), offinc(n)

    For i = 1 To n
        stratum(i) = Worksheets("hhid level").Cells(i + 1, 2).Value
    Next i

    Dim s1 As Integer
    Dim s2 As Integer


    s1 = 0
    s2 = 0
    For i = 1 To n
        If stratum(i) = 1 Then
            s1 = s1 + 1
        Else:
            s2 = s2 + 1
        End If
    Next i

    Dim acres1(s1), hhsz1(s1), offinc1(s1), acres2(s2), hhsz2(s2), offinc2(s2)

    (...)
    End Sub

2 个答案:

答案 0 :(得分:0)

几条评论:

如果您在代码中更改s1和s2的值(就像在for循环中那样),则不应将它们解析为Const。您似乎也在尝试使用s1和s2之前尝试使用它们。

我不确定您正在尝试使用“Const s1 As Integer = s1”语句。你可能只想在代码顶部附近“Dim s1 as Integer”和“Dim s2 as Integer”。

答案 1 :(得分:0)

这对你来说应该稍微好一些:

Sub TOAinput()

Const n As Integer = 648

Dim stratum(n) As Integer
Dim hybrid(n) As Integer
Dim acres(n) As Integer
Dim hhsz(n) As Integer
Dim offinc(n) As Integer

Dim i As Integer

For i = 1 To n
    stratum(i) = Worksheets("hhid level").Cells(i + 1, 2).Value
Next

Dim s1 As Integer
Dim s2 As Integer

For i = 1 To n
    If stratum(i) = 1 Then
        s1 = s1 + 1
    Else
        s2 = s2 + 1
    End If
Next

Dim acres1() As Integer
Dim hhsz1() As Integer
Dim offinc1() As Integer
Dim acres2() As Integer
Dim hhsz2() As Integer
Dim offinc2() As Integer

ReDim acres1(s1)
ReDim hhsz1(s1)
ReDim offinc1(s1)
ReDim acres2(s2)
ReDim hhsz2(s2)
ReDim offinc2(s2)

(...)
End Sub

如果可能的话,我还建议你在数组上声明类型。我假设它们都是整数并且适当地修改了代码,但这可能不适用于您的情况(即不同的数据类型)。