Я относительно новичок в VBA, и у меня возник вопрос об определении массивов.

Я пишу в Microsoft Access функцию для прогнозирования пяти показателей дохода на оставшуюся часть года на основе значений за последний месяц.

Я использую два вложенных For ...Следующие циклы, внешний цикл для показателей дохода и внутренний цикл для текущего месяца до конца месяца. Во внутреннем цикле у меня есть SQL-запрос, который использует значения счетчика для добавления данных в выходную таблицу.

Есть ли лучший / сжатый (более эффективный) способ определения двух массивов, которые у меня есть ниже?

Public Sub qapp_Revenue_Run_Rate()

DoCmd.SetWarnings False

Dim strSQL As String
Dim lng, lng2, counter, lngRRStart, lngMonth As Long

Dim month(1 To 12) As String
month(1) = "Jan"
month(2) = "Feb"
month(3) = "Mar"
month(4) = "Apr"
month(5) = "May"
month(6) = "Jun"
month(7) = "Jul"
month(8) = "Aug"
month(9) = "Sep"
month(10) = "Oct"
month(11) = "Nov"
month(12) = "Dec"

Dim metric(1 To 5) As String
metric(1) = "Investment Advisory Base Fees (ex-Sec Lending)"
metric(2) = "AUM Related Expenses"
metric(3) = "Securities Lending Revenue"
metric(4) = "Distribution & Other Revenue"
metric(5) = "BlackRock Solutions and advisory"

1 ответ1

0

Вы можете использовать функцию Array . Возвращает Variant:

Dim month As Variant

month = Array("Jan", "Feb", "Mar" ...)

или вы можете использовать формат функции

Dim month(1 To 12) As String
Dim i As Long

For i = 1 To 12
    month(i) = Format$(DateSerial(2017, i, 1), "mmm")
Next i

Однако имейте в виду, что это возвращает названия месяцев в соответствии с культурой, определенной в Windows. Таким образом, на другом ПК это может вернуть имена на другом языке.


Примечание: вы объявили

Dim lng, lng2, counter, lngRRStart, lngMonth As Long

В VBA и VB 6.0 объявление типа применяется только к одной переменной. Это означает, что все ваши переменные в этой строке, кроме lngMonth имеют тип Variant ! Вы можете написать lng = "hello" и это работает без ошибок. Вы должны написать

Dim lng As Long, lng2 As Long, counter As Long, lngRRStart As Long, lngMonth As Long

В VB.NET это больше не так, так как тип по умолчанию отсутствует (Variant был удален). Так что в VB.NET ваше утверждение Dim будет правильным.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .