Benannte Parameter
#1
Hallo,

ich war mal wieder am lernen und finde meinen Fehler nicht.
Wenn ich das Programm ausführe bekomme ich die Fehlermeldung...

Fehler beim Kompilieren
If-Block ohne End If

Sub BenannteParameter()
    Adresse "Maier", Ort:="Hamburg"
    Adresse "Maier", Ort:="Hamburg", PLZ:="80445"
    Adresse "Maier", Vorname:="Ernst", Ort:="Hamburg", PLZ:="80445"
    Adresse Name:="Maier", PLZ:="80445", Vorname:="Ernst"
    Adresse "Maier"
End Sub

Sub Adresse(Name As String, Optional Vorname As String, _
        Optional PLZ As String, Optional Ort As String)
    Dim Ausgabe As String
   
    If Vorname <> "" Then
        Ausgabe = Name & ", " & Vorname
    Else
        Ausgabe = Name
    End If
   
    If PLZ <> "" Then
        If Ort <> "" Then
            Ausgabe = Ausgabe & vbCrLf & PLZ & " " & Ort
        Else
            Ausgabe = Ausgabe & vbCrLf & PLZ
        End If
    Else
        If Ort <> "" Then
            Ausgabe = Ausgabe & vbCrLf & Ort
    End If
       
    MsgBox Ausgabe
End Sub
Antworten Top
#2
Hallo Micha2005,

mach es so:
Code:
    Else
        ''entweder so:
        If Ort <> "" Then Ausgabe = Ausgabe & vbCrLf & Ort
        ''oder so:
        If Ort <> "" Then _
            Ausgabe = Ausgabe & vbCrLf & Ort
    End If

wichtig: der Unterstrich (_) nach Then

Gruß von Luschi
aus klein-Paris
Antworten Top
#3
... und, um mal den Fehler mit eigenen Worten zu benennen, dort fehlt im Originalcode ein End If:

Code:
.  If PLZ <> "" Then
        If Ort <> "" Then
            Ausgabe = Ausgabe & vbCrLf & PLZ & " " & Ort
        Else
            Ausgabe = Ausgabe & vbCrLf & PLZ
        End If
    Else
        If Ort <> "" Then
            Ausgabe = Ausgabe & vbCrLf & Ort
'--> hier
    End If


Du hast ja schon ordentlich eingerückt. Wenn Du da mit dem Cursor runter gehst, könnte man es merken. Eine andere Variante wäre, alles zu kommentieren

Code:
.    'Wenn die PLZ leer ist, dann
     If PLZ <> "" Then
        'Wenn der Ort leer ist, dann (1)
        If Ort <> "" Then
            Ausgabe = Ausgabe & vbCrLf & PLZ & " " & Ort
        'Wenn der Ort leer ist, dann (1) oder nicht
        Else
            Ausgabe = Ausgabe & vbCrLf & PLZ
        'Ende Wenn der Ort leer ist, dann (1)
        End If
    'Wenn die PLZ leer ist, dann oder nicht
    Else
        'Wenn der Ort leer ist, dann (2)
        If Ort <> "" Then
            Ausgabe = Ausgabe & vbCrLf & Ort
'--> hier
    'Ende Wenn die PLZ leer ist, dann
    End If
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • Micha2005
Antworten Top
#4
Hab den Fehler gefunden,
das mit den Auskommentieren ist eine gute Idee um die Übersicht zu behalten...

Vor allem als Neuling.

Danke für die Hilfe...

Gruß Micha
Antworten Top
#5
Hallo Micha2005,

Zitat:Hab den Fehler gefunden,

und welchen Vorschlag hast Du jetzt umgesetzt?

fragt sich Luschi
aus klein-Paris
Antworten Top
#6
Weitere Frage: Möchtest Du eine Variante sehen wie man so etwas professioneller macht?

Einen Text mit IF THEN zusammen bauen führt leicht zu Fehlern, mit einer Maske ist das deutlich einfacher.

Andreas.
Antworten Top
#7
Moin!
Ja, mir ist klar, dass es sich hier um eine Übung handelt.
Dennoch:
Da der TE Office 365 besitzt, kann man natürlich auch dessen Möglichkeiten nutzen.
Code:
Sub Adresse(Name As String, Optional Vorname As String, _
        Optional PLZ As String, Optional Ort As String)
    Dim Ausgabe As String
    Ausgabe = WorksheetFunction.TextJoin(", ", 1, Name, Vorname, PLZ, Ort)
    MsgBox Ausgabe
End Sub

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#8
Das geht auch immer noch ohne O365 oder Worksheetfunction, einfach klasssich mit VBA:
Code:
dim s as String

s = trim(plz & " " & ort)

if len(s) then Ausgabe = Ausgabe & vbCrLf & s
' oder
if s <> "" then Ausgabe = Ausgabe & vbCrLf & s

... aber das war glaube ich nicht die Frage.


Knobbi38
Antworten Top
#9
(29.03.2026, 10:55)knobbi38 schrieb: ... aber das war glaube ich nicht die Frage.
Ja, ich hatte mich leicht verlaufen. Wink
Micha2005 unterscheidet ja den Ausgabetext in Bezug auf verschiedene optionale Parameter.

Egal:
Eine uralte Methode wäre auch die Übergabe beliebig vieler Parameter an ein ParamArray.
(ich weiß, ist auch nicht die Frage der Threaderöffnung)

Code:
Sub ParArr()
Adr_2 "Maier", "Hamburg"
Adr_2 "Maier", 80445, "Hamburg"
End Sub

Sub Adr_2(ParamArray Adressen() As Variant)
MsgBox Join(Adressen, vbLf)
End Sub
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#10
Na ja, nicht ganz dasselbe Ergebnis, denn PLZ und Ort sollten glaube ich zusammen in eine neue Zeile und der Name darüber.  32

Knobbi38
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste