Более эффективный способ создания массива месяцев и показателей дохода?
Я относительно новичок в 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"
1 ответ
Вы можете использовать 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
утверждение будет правильным.