Prozedur als Parameter übergeben

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Prozedur als Parameter übergeben

Re: Prozedur als Parameter übergeben

von DPunch » Di, 17.08.2010 13:51

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

Re: Prozedur als Parameter übergeben

von DPunch » Di, 17.08.2010 12:55

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

von Stephan » Di, 17.08.2010 12:53

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:

Code: Alles auswählen

Else
  Plausi = 1
und diese in dem anderen makro abfragen im Sinne statt:

Code: Alles auswählen

Call Plausi(Sub1)
(Plausi ist hier eine Sub)

zu verwenden:

Code: Alles auswählen

If Plausi = 1 Then Call Sub1
oder auch:

Code: Alles auswählen

If Plausi = 1 Then Sub1

(Plausi ist in beiden Fällen eine Function)




Gruß
Stephan

Re: Prozedur als Parameter übergeben

von DPunch » Di, 17.08.2010 12:16

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

von Stephan » Di, 17.08.2010 11:56

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

Nach oben