0

In Python i would do the following

jkk = {'Cadmium': 0.5, "Bly": 40}

def JKKCadmium(result):
    return result / jkk["Cadmium"] - 1

def JKKBly(result):
    return result / jkk["Bly"] - 1

I tried to do something similar in VBA

Option Explicit
Private JKK As New Collection
JKK.Add 0.5, "Cadmium"
JKK.Add 40, "Bly"

Function JKKCadmium(result As Double) As Double
    JKKCadmium = result / JKK("Cadmium") - 1
End Function

Function JKKBly(result As Double) As Double
    JKKBly = result / JKK("Bly") - 1
End Function

But that throws a compile error: "Invalid outside procedure". How can I make the VBA code work?

EDIT: Using dictionary instead still throws same error

Option Explicit
Private JKK As New Scripting.Dictionary
JKK.Add "Cadmium", 0.5
JKK.Add "Bly", 40

Function JKKCadmium(result As Double) As Double
    JKKCadmium = result / JKK("Cadmium") - 1
End Function

Function JKKBly(result As Double) As Double
    JKKBly = result / JKK("Bly") - 1
End Function
Kim Petersen
  • 199
  • 1
  • 7

1 Answers1

1

Probably better to use a class (and populate dicts within the class init). However, you can have your dictionaries as global public but then need an init to populate with values. You can then call within your funcs

Option Explicit

Public jkk As Scripting.Dictionary

Public Sub init()
    
    Set jkk = New Scripting.Dictionary
    jkk.Add "Cadmium", 0.5
    jkk.Add "Bly", 40
End Sub

Public Sub test()
      init
      Debug.Print JKKCadmium(2#)
      
End Sub

Public Function JKKCadmium(ByVal result As Double) As Double
    JKKCadmium = result / jkk("Cadmium") - 1
End Function
QHarr
  • 83,427
  • 12
  • 54
  • 101