2016-10-03 3 views
0

In meinen Fehlerhandler auf der GetCallOrPut = map(legOption) Zeile fallen. Der übergebene Wert ist = "C". Die Karte wird gerade initialisiert, wenn ich hindurchtrete und ich kann nicht herausfinden, was ich vermisse. Ich habe zwei andere Funktionen, die eine ähnliche Karte verwenden und dort keine Probleme haben. Irgendwelche Gedanken?Fehler beim Verwenden der statischen Map in Excel VBA

Public Function GetCallOrPut(ByVal legOption As String) As String 
    'Translates C to Call and P to Put in option Structure 

    Static map As Collection 

    If map Is Nothing Then 
     Set map = New Collection 
     map.Add "C", "Call" 
     map.Add "P", "Put" 
    End If 

    GetCallOrPut = map(legOption) 

End Function 

Antwort

3

Der Schlüssel in einer Sammlung ist das zweite Argument.

verwenden auch Dim statt Statisch:

Public Function GetCallOrPut(ByVal legOption As String) As String 
    'Translates C to Call and P to Put in option Structure 

    Static map As Collection 

    If map Is Nothing Then 
     Set map = New Collection 
     map.Add "Call", "C" 
     map.Add "Put", "P" 
    End If 


    GetCallOrPut = map(legOption) 

End Function 
+0

Dank! Hatten sie umgekehrt. Ich verwende statische aus Effizienzgründen und es scheint gut zu funktionieren; Sollte ich nicht in der Lage sein, statische zu verwenden? Diese Funktion wird mehrmals von einem Arbeitsblattänderungsereignis ausgeführt, wenn Live-Daten in das Blatt eingespeist werden. – StormsEdge

+0

Wenn es für Sie funktioniert, dann okay, aber wie ich es verstehe, spielt es keine Rolle, wie es in der Sub ist und sobald die Sub beendet wird, wird die Sammlung freigegeben und muss jedes Mal wieder hergestellt werden. So statisch ist nicht notwendig. –

+0

@ScottCraner - Wenn die Variable als 'Static' deklariert ist, wird sie am Ende der Funktion nicht freigegeben. Zumindest sollte es ** nicht ** sein (das ist der ganze Sinn des 'Static'-Schlüsselwortes), und es war nicht in den begrenzten Tests, die ich gemacht habe. – YowE3K