Also so geht das definitiv nicht. Da du Params als String definiert hast wird das auch als String an die Funktion übergeben. Du kannst dann höchsten Teilstrings auslesen, aber die Objekte gehen verloren. Zumindest was die Function betrifft. Du muss entweder alle Parameter an die Function übegeben oder die DIM-Deklarationen im Modulkopf (also vor der ersten Sub) darstellen, dann musst du nix übergeben. Hier ein paar Beispiele, wie du die Function aufrufen kannst.
Wenn du nicht alle Parameter in der Function brauchst setze ein Optional vor den jeweiligen PArameter, dann kannst du ihn bei der Übergabe auch weglassen.
Call Parameter_P01 Steuerung, ParameterSet, ParameterRicRow, myRange, myRangeAbs
Function Parameter_P01(Steuerung as worksheet, ParameterSet as worksheet, ParameterRicRow as Long, myRange as Range, myRangeAbs as Range, Optional P01 as Long, Optional P02 as long)
Oder du machst
Call P01 Steuerung, ParameterSet, ParameterRicRow, myRange, myRangeAbs
Function P01(ParamArray Params())
Dann musst du die Parameter aus einem Array auslesen
Set Steuerung=Params(0)
Set Parameterset=Params(1)
'usw.
Am einfachsten ist es jedoch ohne Übergabe der Parameter
Dim ParaSetter As Workbook
Dim ParameterSet As Worksheet
Dim myRange As Range
Dim myRangeAbs As Range
Dim myRangeRel As Range
Dim Params As String
Dim ParameterRicRow As Long
Sub Test()
Set Steuerung = ParaSetter.Worksheets("Steuerung")
Set ParaRegeln = ParaSetter.Worksheets("ParaRegeln")
Set ParameterSet = ParaSetter.Worksheets("ParameterSet")
Call Parameter_P01
End Sub
Function Parameter_P01()
'**********************
'P01
'**********************
Dim AnzahlKonstantMAX As Integer
P01MaxKonstColumn = WorksheetFunction.Match("MAX_KONSTANT", ParameterSet.Range("A1:AM1"), 0)
Dadurch, dass die Deklarationen nun vor der ersten Sub stehen, kannst du auch innerhalb der Function darauf zugreifen. Nachteil: du kannst innerhalb der Function keine Variablen mit gleichem Namen deklarieren. Aber das hast du sowieso nicht vor, oder?
Abgesehen davon kannst du Function auch durch Sub ersetzen, da du ja offenbar nix zurückgeben willst, sonst würdest du nicht Application.run verwenden.
Private Sub Parameter_P01()
Gruß Mr. K.
|