Более эффективный способ создания массива месяцев и показателей дохода?

198
arc

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

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

Я использую два вложенных цикла For ... Next, внешний цикл для показателей дохода и внутренний цикл для текущего месяца и до конца месяца. Во внутреннем цикле у меня есть 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" 
0

1 ответ на вопрос

0
Olivier Jacot-Descombes

Вы можете использовать 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утверждение будет правильным.