Seite 1 von 1
Re: Prozedur als Parameter übergeben
Verfasst: Di, 17.08.2010 11:56
von Stephan
Kann ich die Subroutine als Parameter übergeben?
nicht das ich wüßte, aber übergib doch nur den namen oder eine Zahl als Paramter und verzweige mittels SElect Case
Code: Alles auswählen
Sub Plausi(oSub As String)
If ..... Then
...
ElseIf.... Then
...
Else
Select Case oSub
Case "Sub1"
Call Sub1
Case "Sub2"
Call Sub2
'...
End Select
End If
End Sub
Achtung, ich würde für die Parameterübergabe nicht Strings verwenden welche Gleich den Namen von Makros sind. ich weiß jetzt nicht ob das an der Stelle Probleme macht, man sollte es aber von vornherein nicht provozieren.
Gruß
Stephan
Re: Prozedur als Parameter übergeben
Verfasst: Di, 17.08.2010 12:16
von DPunch
Aloha
toni007 hat geschrieben:Kann ich die Subroutine als Parameter übergeben?
Nein, das geht nicht, ehrlich gesagt erschliesst sich mir der Sinn auch überhaupt nicht.
Wenn Du doch sowieso erstmal eine Verzweigung einbauen musst, mit der Du ermittelst, welche Prozedur Du "Plausi" übergeben willst, damit diese von dort aufgerufen wird...
warum rufst Du nicht einfach die Prozedur direkt auf?
Re: Prozedur als Parameter übergeben
Verfasst: Di, 17.08.2010 12:53
von Stephan
Stephan, daran habe ich auch schon gedacht. Ich hatte gehofft, es geht noch kürzer.
Meinethalben kannst Du auch alternativ statt Sub Plausi eine entsprechende Funktion verwenden, welche enthält:
und diese in dem anderen makro abfragen im Sinne statt:
(Plausi ist hier eine Sub)
zu verwenden:
oder auch:
(Plausi ist in beiden Fällen eine Function)
Gruß
Stephan
Re: Prozedur als Parameter übergeben
Verfasst: Di, 17.08.2010 12:55
von DPunch
Aloha
toni007 hat geschrieben:DPunch, bis auf den unterschiedlichen Prozeduraufruf ist der Code in den Case-Abschnitten absolut identisch. Da liegt es doch nahe, den sich wiederholenden Code auszulagern (Pflegeaufwand, Übersichtlichkeit) und das ganze über Parameter zu steuern.
Das liegt durchaus Nahe, nur erschleisst sich mir einfach nicht, warum Du erst eine Verzweigung zur Entscheidung für eine bestimmte Prozedur einbaust, diese (wäre es möglich) an eine weitere Prozedur weiterreichst, welche dann aufgrund des Übergabeparameters wiederum entscheiden soll, welche Prozedur aufgerufen werden soll.
Wenn es Dir um Pflegeaufwand / Übersichtlichkeit geht, verpack den ganzen Codeausschnitt, der über die aufzurufende Prozedur entscheidet, in eine Subroutine und übergib dieser die für die Entscheidungsfindung relevante(n) Variable(n).
Code: Alles auswählen
Sub Test
Entscheidung(meineEntscheidungsvariable)
End Sub
Sub Entscheidung(nParameter)
If ..... Then
...
ElseIf.... Then
...
Else
Select Case nParameter
...
Case 3
Call Sub1
Case 4
Call Sub2
...
End Select
End If
End Sub
Re: Prozedur als Parameter übergeben
Verfasst: Di, 17.08.2010 13:51
von DPunch
Aloha
toni007 hat geschrieben:Die If-Verzweigung dient nicht zur Entscheidung für eine bestimmte Prozedur. Hier mal ein kompletterer Code.
Aber die Select Case Verzweigung ja offensichtlich.
toni007 hat geschrieben:Folgender Codeabschnitt wiederholt sich ständig und das möchte ich verkürzen.
Genau das könntest Du mit der vorgeschlagenen Prozedur tun - oder wie von Stephan vorgeschlagen eben mit einer Function
Code: Alles auswählen
Select Case oSelection.CellAddress.Column
Case 1
oFrm1_Load
Case 2
oFrm2_Load
Case 3
If Entscheidung = True Then Call oFrm3_Load
Case 4
If Entscheidung = True Then Call oFrm4_Load
End If
Case 5
usw., usw.
EndSelect
Code: Alles auswählen
Function Entscheidung as Boolean
Entscheidung = False
If oSheet.getCellRangeByName("C" & arow + 1).String = "" Then
MsgBox Tun Sie zuerst dies...,", 16, "Stopp"
ElseIf Left(oSheet.getCellRangeByName("C" & arow + 1).String, 1) <> "W" Then
MsgBox "Tun Sie zuerst jenes...," , 48, "Hinweis"
Else
Entscheidung = True
End If
End Function