Uma maneira mais eficiente de criar uma matriz de meses e métricas de receita?

0

Sou relativamente novo no VBA e tenho uma dúvida sobre como definir matrizes.

Estou escrevendo uma função no Microsoft Access para projetar cinco métricas de receita para o resto do ano com base nos valores do mês mais recente.

Eu uso dois loops For ... Next aninhados, um loop externo para métricas de receita e um loop interno para o mês atual até o mês final. Dentro do loop interno, tenho uma consulta SQL que utiliza valores de contador para anexar dados a uma tabela de saída.

Existe uma maneira melhor / condensada (mais eficiente) de definir os dois arrays que eu tenho abaixo?

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"
    
por arc 30.03.2017 / 22:52

1 resposta

0

Você pode usar a função Array . Ele retorna um Variant :

Dim month As Variant

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

ou você pode usar a função de formatação

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

No entanto, esteja ciente de que isso retorna os nomes dos meses de acordo com a cultura definida no Windows. Então, em outro PC, isso poderia retornar os nomes em outro idioma.

Uma nota lateral: você declarou

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

No VBA e no VB 6.0, a declaração de tipo aplica-se apenas a uma variável. Isso significa que todas as suas variáveis nesta linha, exceto lngMonth , são do tipo Variant ! Você pode escrever lng = "hello" e isso é executado sem dar erro. Você deve escrever

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

No VB.NET, este não é mais o caso, já que não há nenhum tipo padrão ( Variant foi removido). Então, no VB.NET, sua declaração Dim estaria correta.

    
por 30.03.2017 / 23:00