Effizientere Methode zur Erstellung einer Reihe von Monaten und Umsatzkennzahlen?

272
arc

Ich bin relativ neu in der VBA und hatte eine Frage zur Definition von Arrays.

Ich schreibe eine Funktion in Microsoft Access, um fünf Umsatzmesswerte für den Rest des Jahres basierend auf den Werten des letzten Monats zu projizieren.

Ich verwende zwei geschachtelte For ... Next-Schleifen, eine äußere Schleife für Umsatzkennzahlen und eine innere Schleife für den aktuellen Monat bis zum Monatsende. Innerhalb der inneren Schleife habe ich eine SQL-Abfrage, die Zählerwerte zum Anhängen von Daten an eine Ausgabetabelle verwendet.

Gibt es eine bessere / kompaktere (effizientere) Möglichkeit, die zwei Arrays zu definieren, die ich unten habe?

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 Antwort auf die Frage

0
Olivier Jacot-Descombes

Sie können die ArrayFunktion verwenden. Es gibt ein zurück Variant:

Dim month As Variant  month = Array("Jan", "Feb", "Mar" ...) 

oder Sie können die Formatfunktion verwenden

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 

Beachten Sie jedoch, dass dadurch Monatsnamen gemäß der in Windows definierten Kultur zurückgegeben werden. Auf einem anderen PC könnte dies die Namen in einer anderen Sprache zurückgeben.


Eine Randnotiz: Sie haben erklärt

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

In VBA und VB 6.0 gilt die Typdeklaration nur für eine Variable. Dies bedeutet, dass alle Ihre Variablen in dieser Zeile außer lngMonthvom Typ sind Variant! Sie könnten schreiben lng = "hello"und das läuft ohne Fehler. Du musst schreiben

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

In VB.NET ist dies nicht mehr der Fall, da es keinen Standardtyp gibt ( Variantwurde entfernt). In VB.NET wäre Ihre DimAussage also korrekt.