Объявление размера массива в Visual Basic - PullRequest
0 голосов
/ 28 ноября 2011

Я впервые работаю с VB. В основном я привык работать в matlab и обнаружил, что многое из того, что я считаю само собой разумеющимся в matlab, должно быть явно объявлено в VB. Срыв!

В частности, мне нужно объявить два размера массива s1 и s2. Как видно из приведенного ниже кода, s1 - это число элементов в наборе «n», где переменная «stratum» равна 1. s2 - это количество элементов в наборе «n», где переменная «stratum» равна 2. Довольно простой.

Мой подход заключается в том, чтобы просто зациклить переменную страты от 1 до n и сосчитать эти случаи; и затем объявите полученные суммы как константы. Это сработало бы в matlab, но VB не принимает s1 и s2 в качестве констант. Он даже не отобразит s1 и s2, когда я вставлю команду debug.print после цикла.

Я просмотрел соответствующие посты, уже сделанные. Я ценю любые советы. Спасибо.

    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 голосов
/ 28 ноября 2011

Это должно работать немного лучше для вас:

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

Я также рекомендовал бы, если это возможно, объявлять типы в массивах.Я предположил, что все они являются целочисленными, и изменил код соответствующим образом, но это может не сработать в вашей ситуации (т. Е. Разные типы данных).

0 голосов
/ 28 ноября 2011

Пара комментариев:

Если вы изменяете значения s1 и s2 в своем коде (как в цикле for), они не должны быть отклонены как Const. Вы также, похоже, пытаетесь использовать s1 и s2 до того, как они были объявлены.

Я не уверен, что именно вы пытаетесь сделать с помощью операторов "Const s1 As Integer = s1". Вы, вероятно, просто хотите, чтобы "Dim s1 as Integer" и "Dim s2 as Integer" находились в верхней части вашего кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...