2017-05-11 3 views
-5

in Google Docs ich sah, wie jemand ein Skript, das eine Funktion geschrieben, die wie war:vba Arrays von Google Apps Script

function createChargeList() { 
    return [['No.', 'Name', 'Cooldown', 'Power', 'Energy Loss', 'Type', 'Damage Window Start'], 
      [1.0, 'AerialAce', 240.0, 55.0, 33.0, 3.0, 190.0], [2.0, 'AirCutter', 270.0, 60.0, 50.0, 3.0, 180.0], [3.0, 'AncientPower', 350.0, 70.0, 33.0, 6.0, 285.0], [4.0, 'AquaJet', 260.0, 45.0, 33.0, 11.0, 170.0], [5.0, 'AquaTail', 190.0, 50.0, 33.0, 11.0, 120.0] 
} 

Ich versuche, mich zu lehren, in VBA Codierung und ich habe Schwierigkeiten zu verstehen, wie So etwas wie der obige Code würde in ein VBA-Skript für Excel übertragen.

+0

Dies sieht aus wie Zeilen aus einer Text-/Flat-Datei und wäre wahrscheinlich in einer anderen Struktur als ein Array für VBA-Zwecke besser organisiert. –

+0

@DavidZemens Würden Sie vielleicht vorschlagen, eine Tabelle mit all diesen Elementen zu erstellen und dann die Tabelle selbst als Variable zu bezeichnen? Ich bin mir nicht sicher, ob das funktionieren würde, aber ich hielt das für eine mögliche Lösung. Es gibt 12 Spalten und ungefähr 251 Gesamtzeilen (Kopfzeilen und Daten) mit mehr Zeilen, die ich später hinzufügen könnte. Das von mir bereitgestellte Beispiel war eine sehr kleine Probe des Objekts. – aistreet

Antwort

2

Google Apps-Skript basiert auf Javascript. VBA basiert auf Visual Basic. Hardcoding ist eine Möglichkeit, aber Sie enden mit einigen funky Array und Sie sind dann beschränkt auf VBA's clunky Array-Methoden (oder deren Fehlen).

Function createChargeList() 
    Dim var(5) 
    var(0) = [{"No.", "Name", "Cooldown", "Power", "Energy Loss", "Type", "Damage Window Start"}] 
    var(1) = [{1.0, "AerialAce", 240.0, 55.0, 33.0, 3.0, 190.0}] 
    var(2) = [{2.0, "AirCutter", 270.0, 60.0, 50.0, 3.0, 180.0}] 
    var(3) = [{3.0, "AncientPower", 350.0, 70.0, 33.0, 6.0, 285.0}] 
    var(4) = [{4.0, "AquaJet", 260.0, 45.0, 33.0, 11.0, 170.0}] 
    var(5) = [{5.0, "AquaTail", 190.0, 50.0, 33.0, 11.0, 120.0}] 
    createChargeList = var 

End Function 

Oder Sie könnten "codieren" es ein zu Dictionary oder Collection oder ArrayList (von ArrayList s). Die Verwendung eines Dict oder ArrayList hätte einige Vorteile, da sie andere Methoden verwenden können. Wörterbuch Beispiel ist dies nicht, wie ich es eine Struktur gibt, aber es zeigt, wie Sie es tun könnten:

Function createChargeDict() 
    Dim d As Object 
    Set d = CreateObject("Scripting.Dictionary") 
    d("No.") = Array(1#, 2#, 3#, 4#, 5#) 
    d("Name") = Split("AerialAce,AirCutter,AncientPower,AquaJet,AquaTail", ",") 
    'etc... 
    Set createChargeDict = d 
End Function 

Aber es wird schwierig sein, zu „codiert“ es, wenn es mehr als eine sehr kleine Menge von Daten zB ist , per Tims Antwort (oder ähnlich durch, was ich oben getan habe), und natürlich, wenn alles ändert müssen Sie gehen und den Code bearbeiten.

Eine weitere Option wäre, die Daten als CSV-Datei oder in anderer Weise getrennt zu speichern und sie zur Laufzeit in ein Array/dict/list/collection einzulesen.

Was ich tun würde (Opinion)

Einen weiteren häufigen Ansatz - wie Sie in Ihren Kommentaren fragten nach - wäre, einfach eine Tabelle auf einem Arbeitsblatt erstellen (optional: das Arbeitsblatt so Benutzer kann verstecken‘ (um es zu vermasseln), weisen Sie Name zu, um den Bereich der Tabelle darzustellen, und dann können Sie nur auf die .Value Eigenschaft des Bereichs verweisen, die ein Array zurückgeben wird.

die zusätzlichen Vorteile davon ist, dass Sie alle die Worksheet Methoden und Funktionen gegen den Bereich von Zellen (oder als Tabelle/ListObject auf einem Blatt) können, und dann kann man viel mehr mit ihm in Bezug zu tun Filterung, Slicing, Finden von Elementen, Matching/Indizierung, etc., und es ist auch einfacher zu aktualisieren.

2

VBA hat nicht die gleiche Art von Arrayliteral Konstrukt Sie in Javascript finden

Dies ist, was Sie haben, wenn Sie eine einzeilige Zuordnung wollen:

Dim a 

a = Array("a", "b", "c") '>>0-based 1-d array 

a = ["a", "b"] '>> *1*-based 1-d array 

a = [{"a", "b";"c","d"}] '>> *1*-based 2-d array 

Beachten Sie, dass letzte ist nicht das gleiche wie Ihr Beispiel (dh kein Array von Arrays)

Verwandte Themen