If...Then...else

Hallo Leute,
Ich versuche in einer Access 2003-Tabelle mittels einer If…Then…Else Schleife eine Spalte Anredezeile1 auszufüllen.
Ich habe zwar die Spalte Anrede1 mit vorhandenen Daten, möchte aber für die Verwendung in einem Brief eine Anredezeile ausfüllen lassen.
Meine Versuche mit der Folgenden Variante sind gescheitert. Die Schleife lässt sich nur ausführen, wenn der If-Part nur ein Objekt enthält.

If rs![Anrede1] = „Herrn“ Or „Herr“ Then
rs![Anredezeile1] = „Sehr geehrter Herr“
End If

Wie kriege ich das hin, dass ich mehrere Argumente verwenden kann ?

Gruß Christian

Moin, Christian,

 If rs![Anrede1] = "Herrn" \_
 Or rs![Anrede1] = "Herr" Then
 rs![Anredezeile1] = "Sehr geehrter Herr"
 End If

Bei längeren Schachtelungen ist eh der Select case vorzuziehen:

 Select Case (rs!Anrede1)
 Case ("Herrn", "Herr")
 rs!Anredezeile1 = "Sehr geehrter Herr"
 Case "Frau"
 rs!Anredezeile1 = "Sehr geehrte Frau"
 Case Else ' Schmutzverteiler
 End Select

Gruß Ralf

Moin Ralf

Select Case (rs!Anrede1)
Case („Herrn“, „Herr“)
rs!Anredezeile1 = „Sehr geehrter Herr“
Case „Frau“
rs!Anredezeile1 = „Sehr geehrte Frau“
Case Else ’
Schmutzverteiler
End Select

wenn ich nicht irre, braucht es keine Klammern bei >Case („Herrn“, „Herr“)

Select Case (rs!Anrede1)
Case („Herrn“, „Herr“)
rs!Anredezeile1 = „Sehr geehrter Herr“
Case „Frau“
rs!Anredezeile1 = „Sehr geehrte Frau“
Case Else ’
Schmutzverteiler
End Select

wenn ich nicht irre, braucht es keine Klammern bei >Case
(„Herrn“, „Herr“)

Hallo,
richtig die Klammern sind nicht nötig, aber schaden auch nicht.

Ich denke das die Fehlermeldung bedeutet das die Recordset Variable rs leer ist. (nicht verwechseln mit einem Recordset das keine Rows enthält.)

'Überprüfen ob das Recordsetobjekt vorhanden ist
 If Not rs Is Nothing Then
 'With-Block um direkt mit "." auf jede Property / Methode des Recordsets zuzugreifen
 With rs
 'Überprüfen ob das Recordset Rows (Datensätze) enthält
 If Not (.EOF And .BOF) Then
 'kopfgesteuerte Schleife, Abbruch sobald das Ende des Recordsets erreicht ist
 Do Until .EOF
 'String Konvertierung erzwingen, damit bei einem leeren Feld (NULL) kein Fehler auftritt
 Select Case .Fields("Anrede1").Value & ""
 Case "Herr", "Herrn": .Fields("Anredezeile1").Value = "Sehr geehrter Herr"
 Case "Frau": .Fields("Anredezeile1").Value = "Sehr geehrte Frau"
 End Select
 'nächsten Record einlesen
 .MoveNext
 Loop
 End If
 End With
 End If

Hier sind die Klammern bei „If Not (.EOF And .BOF)“ nötig, da sonst sich das Not nur auf den ersten Teil der Bedingung auswirkt. Andernfalls müsste man „If Not .EOF And Not .BOF“ schreiben.
Bei einem leeren Recordset geben die Properties beide True zurück, sonst nur jeweils eine davon am Anfang bzw. am Ende.

P.S. rs!FeldName ist identisch mit rs.Field(„FeldName“).Value
Mag diese „Abkürzung“ nur nicht besonders.

MfG Dominik

Hi Christian,

wenn ich nicht irre, braucht es keine Klammern bei >Case
(„Herrn“, „Herr“)

Set rs = Openrecordset …

fehlt oder in die Hose gegangen ist. Der Select kann da gewiss nichts für.

Gruß Ralf

Danke Ralf,

ich hatte vergessen die openrecordset - Zeile zu berichtigen !

Gruß Christian

Und Dank an alle !!!