Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Variable mittels Schleife mehrfach beschreiben - will aber nicht :)

Begonnen von nimora, Juli 24, 2015, 17:37:24

⏪ vorheriges - nächstes ⏩

nimora

Hi, folgender Code leigt vor:
Dim strMailAnrede As String
     
        If Anrede = "Herr" Then
            strMailAnrede = "Sehr geehrter Herr"
        ElseIf Anrede = "Frau" Then
            strMailAnrede = "Sehr geehrte Frau"
        ElseIf Anrede = "Mr." Then
            strMailAnrede = "Dear Mr. "
        ElseIf Anrede = "Mrs." Then
            strMailAnrede = "Dear Mrs. "
        End If
       
        MsgBox strMailAnrede


Es werden mehrere Datensätze mittels sql-abfrage und dann mittels do while schleife um dieses if-statement herum abgefragt.
Leider erhalte ich nicht bei jeden durchlauf die korrekte anrede, sondern immer wieder die, dessen if-Bedingung als erstes auftrat.

Bsp.
zwei Datensätze. erster mit Mrs. zweiter mit Mr.

Ich bekomme zwei mal einen msgbox aber es steht in beiden Mrs. drin. tausche ich das ganze in den datensätzen, kommt zwei mal Mr. raus.

ich dachte, dass die variable nach der msgbox wieder leeren kann aber das will mit Null oder Nothing nicht funzen.

Wäre für einen Tip mal wieder dankbar...

Edit:

habe mir auch mal die Werte für "Anrede" ausgeben lassen. Die sind korrekt, da wird erst das eine (Mrs.) und dann das andere (Mr.) ausgegeben. die Variable wird leider nicht angeglichen. Hat es was mit dem Ort der Variablen-Deklaration zu tun?

MzKlMu

Hallo,
wenn man für die Anrede eine extra Tabelle macht mit der Anrede und der Mailanrede in je einer Spalte und in einer weiteren Spalte eine Zahl als Primärschlüssel, braucht man in der Datentabelle nur die entsprechende Zahl für die Anrede einzutragen bzw. auszuwählen per Kombi, kann man mit einer Verknüpfung arbeiten. Dann braucht es keinen Code, keinen Buchstaben, es geht dann alles automatisch.

PS:
Code sollte man stets komplett zeigen und nicht nur Ausschnitte. Der Rest wäre hier bestimmt auch noch wichtig.
Gruß Klaus

nimora

Hey MzKlMu,

danke für die Antwort.

eine eigene Tabelle nur für die Anrede erscheint mir da ein wenig mit Kanonen auf Spatzen geschossen, oder nicht? und das was ich da versuche ist doch nichts ungewöhnliches, oder?

Um den Code ist lediglich noch die do while schleife und dass diese funktioniert, konnte ich mit einer anderen msgbox prüfen.

letztlich geht es darum, warum die variable keinen neuen wert annimmt. hast du da ne Idee?

thx

MzKlMu

Hallo,
Zitateine eigene Tabelle nur für die Anrede erscheint mir da ein wenig mit Kanonen auf Spatzen geschossen, oder nicht? und das was ich da versuche ist doch nichts ungewöhnliches, oder?
nein, das ist nicht mit Kanonen auf Spatzen geschossen. Das ist die für eine Datenbank einzig sinnvolle Lösung. In einer Datenbank werden alle Daten in Tabellen abgelegt. Und ja Dein Vorhaben ist für eine Datenbank völlig, aber wirklich völlig ungewöhnlich. Solche If Then Konstruktionen sind so gut wie immer ein Hinweis auf ein falsches Datenmodell. Ich wage zu behaupten, dass man zu Datendarstellungen und Manipulationen in einer Datenbank niemals If ... Then benötigt. Korrektes Datenmodell vorausgesetzt. Und die langsamste aller Lösungen ist sie auch. Nimm die Tabelle und Du hast eine Datenbanklösung, alles andere ist kontraproduktiv.

Ich habe Dir ein schnelles einfaches Beispiel gemacht, siehe Anhang.
Das Beispiel besteht aus 2 Tabellen, den Beziehungen und einer Abfrage. Die Abfrage verdeutlicht die Einfachheit der Geschichte. Ohne einen Buchstaben VBA.

Da das Vorhaben falsch ist und somit der Code überflüssig kann ich zum Code nix sagen, werde auch nicht nachforschen, da ich so etwas nicht benötige. In meinen Datenbanken gibt es solche Sachen nicht, niemals nicht.  ;D
Gruß Klaus

MaggieMay

Hi,
Zitatletztlich geht es darum, warum die variable keinen neuen wert annimmt.
genau das kann man aber doch nur an dem fehlenden Code drumherum erkennen.
Ich tippe darauf, dass "Anrede" sich gar nicht ändert. Somit kann es auch "strMailAnrede" nicht.

Teste im Unterbrechungsmodus, dann siehst du was passiert.
Freundliche Grüße
MaggieMay

MzKlMu

Hallo,
nach dem drum rum Code hatte ich in meiner Antwort in #1 auch schon gefragt, wurde aber nicht beantwortet.
Gruß Klaus

nimora

Ich danke euch für die bemühungen :)

MzKlMu, du hast natürlich recht, im Sinne eines ordentlichen Datenbank-Designs sollte man das machen. Grundsätzlich hilft es mir in diesem Fall aber nicht - meine ich, lass mich aber gerne belehen.

An den Code komme ich jetzt am Wochenende nicht leicht ran. ich hole es so schnell es geht nach.

Grundsätzlich geht es in meinem Versuch aber nicht nur um das Anzeigen von Herr oder Frau. Es geht darum, dass mittels der if then anweisung verschiedensprachige Serien-Mails verschickt werden sollen. das ganze brauch dann noch ein bestimmtes text-format. daher leuchtet mir nicht ein, warum es mir helfen soll, die anrede in eine tabelle zu packen. es ist ja leicht diese anzulegen, aber dann würde ich aus meinem Verständnis doch wieder anfangen das if-statement zu verwenden, um die verschiedenen anreden aber auch verschiedene Sprachen in den Mails abzudecken.

wo liegt also mein denkfehler?

MzKlMu

Hallo,
Zitatum die verschiedenen anreden aber auch verschiedene Sprachen in den Mails abzudecken.
wie ist das in der Tabelle gelöste ? Bzw. wie ist die Tabelle aufgebaut ?

Gruß Klaus

nimora

ich habe ein Feld, das aus outlook gefüllt wird. der Mail-Text also. den sichte ich und notiere mit die Daten daraus. Nachname, Anrede, email. wenn es eine deutsche Mail ist, wähle ich in Anrede Mann oder Frau und ist es eine englische, Mr. oder Mrs.

Danach möchte ich per Button eine immer gleiche Mail an die Person schicken, nur eben angepasst durch den Namen und die korrekte Anrede und jeweils die entsprechende sprache. das würde ich dann hardcodiert in das script setzen. daher der check, wenn ich den butto drücke, dass in jedem datensatz geprüft wird, welche Anrede es ist  und dann über das if-statement den richtigen Mailtext wählt und verschickt.

Tabelle wäre also: email-text, nachname, anrede, email (die email versuche ich per regex aus dem feld email-text zu filtern, klappt leider nicht wie gewünscht - habe ich in einem anderen threat beschrieben)

MzKlMu

Hallo,
ich bleibe da bei, die einzig für eine Datenbank sinnvolle Lösung ist die Tabelle.
Und wieso Du da immer noch ein  if-statement brauchst, verstehe ich nicht. Siehst Du in meinem Beispiel irgendwo VBA Code ?
Wie unterscheidet sich meine Beispieltabelle von Deiner Tabelle ?

Ich kann nicht verstehen, was Du gegen die Tabelle hast, das ist doch das einfachste und flexibelste. In der Tabelle kannst Du auch noch gleich die Sprache als Fremdschlüssel hinterlegen.
Die Tabelle ist doch datenbankgerecht, doch nicht der VBA Code.
Gruß Klaus

nimora

oh sorry, ich habe den dateianhang gar nicht gesehen. jetzt klärt sich natürlich einiges und ich verstehe, wie du es meinst.

tja, sieht genial aus. verstehe zwar deine abfrage noch nicht, da es etwas anders aussieht, als in abfragen, die ich erstelle, aber das werde ich sicher noch rauskriegen.

Besten dank und sorry für das missverständnis.

nimora

Ich muss jetzt doch noch mal einsteigen, denn ich habe das von mir vermutete Problem, was sich aber sicher wieder aus unwissenheit ergibt.

wenn ich bei deiner BeispielDB bleibe, MzKIMu.

Im VBA verarbeite ich die tblDaten und gucke dort nach angegebenen bedingungen, die entscheiden, ob jemand eine Mail bekommt oder nicht. woher bekomme ich im code, der sich die tblDaten nimmt nun die anrede aus tblAnrede? wenn ich mich im code auf AnredeID_F bezieh, bekomme ich nur die ID ausgegeben, ist ja auch logisch. Wie komme ich also nun an das Feld MailAnrede aus tblAnrede?

Vorstellen kann ich es mir nur über einen weiteren recordset und eine weiter sql-abfrage. wäre das der richtige ansatz?

MzKlMu

Hallo,
ich verstehe immer noch nicht wozu Du VBA benötigst. Das geht doch mit der Abfrage im Beispiel vollkommen automatisch.
In meiner BeispielDB gibt es keinen VBA Code, oder siehst Du welchen ?

Zitatda es etwas anders aussieht, als in abfragen, die ich erstelle,
die Abfrage im Beispiel ist eine einfache Auswahlabfrage mit 2 Tabellen und der Verknüpfung über die Schlüsselfelder. Diese Abfrageart (mit mehr oder weniger Tabellen) ist die am häufig vorkommende Art von Abfragen. Jedes Formular sollte an eine solche Abfrage gebunden sein. Was hast Du für Abfragen ?

ZitatIm VBA verarbeite ich die tblDaten und gucke dort nach angegebenen bedingungen, die entscheiden, ob jemand eine Mail bekommt oder nicht.
Auch dazu wird man kein VBA verwenden, sondern die Daten über eine Abfrage filtern.

Um es noch mal deutlich zu sagen:
In einer korrekt aufgebauten DB sollte man für die Datendarstellung und Datenverarbeitung kein VBA benötigen. Und If ... Then schon mal gar nicht. Wenn doch, hat man ein falsches Datenmodell. Ganz abgesehen davon, sind VBA Lösungen zur Datenverarbeitung immer zu vermeiden, das das die langsamste Version ist.
Gruß Klaus

nimora

vom if then habe ich mich doch nun schon getrennt, schaffe es aber nicht über die tabellenabfragen.

okay, dann sage mir doch bitte, wie ich ohne vba das versenden der mails hinbekommen soll? mit board-mitteln geht das nicht, zumindest nicht  so, wie ich es brauche. mit einer abfrage kann ich vielleicht die anrede filtern, die Mail versendet sich damit aber nicht, oder irre ich da? an der stelle kommt doch vba ins spiel, oder nicht?

ich bin wirklich dankbar für deine und eure hilfe, aber versteht doch auch mal, dass man als anfänger nicht immer alles überrblickt und versteht und man sich stück für stück annähern muss. ich habe mir die grundlagen für datenbank-design usw. angesehen, dennoch ist sowas doch nicht gleich verinnerlicht und dannoch versteht man die hinweise der profis nicht sofort. Wichtig ist es, dass ein verständnis entsteht und das nimmt manchmal verschiedene wege.

VG

MzKlMu

Hallo,
Zitatokay, dann sage mir doch bitte, wie ich ohne vba das versenden der mails hinbekommen soll?
dass das ohne VBA geht habe ich ja nie gesagt. Natürlich benötigst Du dazu VBA. Das ist aber Benutzeroberfläche und nicht Datenverarbeitung. An den eigentlichen Daten wird ja durch das Versenden der Mail nichts geändert. Datenbasis für das Versenden ist dann nicht die Tabelle, sondern die Abfrage, ähnlich aufgebaut wie die in meinem Beispiel. Und in dieser Abfrage siehst Du den Klartext der Anrede und nicht die (Schlüssel)Zahl. Schlüsselzahlen sind im Regelfall für den Anwender bedeutungslos und gar nicht sichtbar.
Gruß Klaus