Automatische Buchungsbestätigungen bei Nachricht
#11
Hallo :)

jetzt hat sich doch noch eine Frage angeschlossen:

Wenn mehrere Teilnehmer in einer Buchung angemeldet werden und die MA-Namen in mehreren Zeilen stehen, werden diese nicht mit in die Variable Buch.MA_Name übernommen, weil das Array sich nur auf 1 Zeile beschränkt.
Mein erster Lösungsansatz, weitere Buch.MA_Name Variablen zu definieren scheitert daran, dass es nicht immer mehrere Zeilen mit Namen gibt und dann die Fehlermeldung "Laufzeitfehler 9: Index außerhalb des gültigen Bereichs" aufpoppt.

Wie muss ich das im Code anpassen/integrieren, damit die Variablen Buch.MA_Name2, Buch.MA_Name3, Buch.MA_Name4 und Buch.MA_Name5 nur bei Bedarf ins Spiel kommen? 
Bedarf heißt, falls es eben mehrere Zeilen mit Namen gibt. Wahrscheinlich ist es ganz einfach, aber ich blicke mal wieder nicht durch  20

Der aktuelle Code ist angehängt und funktioniert einwandfrei, wenn ich die zusätzlichen Variablen auskommentiere!
Code:
Sub sb_Neue_Buchung()
Dim Buch As Buchung
Dim EML As MailItem, IBx As Folder
Dim Webinare As Folder
Dim objOutlook As Object
Dim objMail As Object

    Set objOutlook = CreateObject("Outlook.Application")
    Set objMail = objOutlook.CreateItem(0)
    Set NSp = Application.GetNamespace("MAPI")
    Set IBx = NSp.Folders.Item(myML).Folders.Item("Posteingang")
    Set Webinare = NSp.Folders.Item(myML).Folders("Posteingang").Folders("Webinare")
    Set EML = IBx.Items.GetLast
        If EML.Class = olMail Then
            If InStr(1, EML.Subject, "neue Buchung", vbBinaryCompare) > 0 Then
                Ar = Split(EML.Body, vbLf)
                Debug.Print UBound(Ar)
                Buch.EMail = Ar(1)
                Buch.Kurs = Ar(2)
                Buch.Termin = Ar(3)
                Buch.MA_Name = Ar(7)
                Buch.MA_Name2 = Ar(8)
                Buch.MA_Name3 = Ar(9)
                Buch.MA_Name4 = Ar(10)
                Buch.MA_Name5 = Ar(11)
                EML.Move Webinare
                 With objMail
                    .To = Buch.EMail
                    .Subject = "Buchungsbestätigung Online-Training: " & Buch.Termin
                    .BodyFormat = 2
                    .GetInspector
                    .HTMLBody = "<span style='font-family:Calibri;font-size:11.5pt;'>" _
                              & "Text...</span>" & .HTMLBody
                      .Display
                  End With
            End If
        End If
End Sub

Besten Gruß,
Phiant
Top
#12
Hallöchen,

Du gibst ja schon die obere Grenze vom Array aus. Wenn Du bei dieser Umsetzung bleiben willst, dann verwende die vor jeder Zuweisung in einer Bedingung.
Im Prinzip
If ... Then ... Name = ar(7)
If ... Then ... Name = ar(8)
usw.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#13
(26.05.2021, 22:24)schauan schrieb: If ... Then ... Name = ar(7)
If ... Then ... Name = ar(8)
usw.

Hallöchen schauan :)

Genau an den "..." bin ich geistig gescheitert. Welchen Befehl muss ich denn hinter das If setzen?
Das ist mein erstes Makro in Outlook und ich habe den Code, so wie er ist von Fennek übernommen und bin schon dankbar, dass es soweit gut funktioniert.

Meine Gedanken dazu:
If ar(7) vorhanden (wie prüfe ich dieses "vorhanden"?)
Then Buch.MA_Name = ar(7)

Dank auch dir für die schnelle Hilfe!

Beste Grüße
Phiant
Top
#14
Hallöchen,

für die Indizees eines Arrays gibt es Ober- ( Ubound() ) und Untergrenzen ( LBound() ). Verwendest Du in Deinem Code beim Debug ja schon.
Unten hast Du in der Regel 0 oder 1, und oben je nach Füllung.

Im Prinzip könntest Du, zwar etwas umständlich, aber so Programmieren:

If Ubound(ar) > 0 Then Buch.EMail = Ar(1)
If Ubound(ar) > 1 Then Buch.Kurs = Ar(2)
...

Wenn (die ersten) Felder des Arrays immer sicher belegt sind, könntest Du die Prüfung auf die unsicheren beschränken.
Kann auch sein, dass eine einzelne Prüfung zwischendrin reicht, z.B. dass bei 10 immer auch eine 11 kommt

Code:
'
                Ar = Split(EML.Body, vbLf)
                Debug.Print UBound(Ar)
                Buch.EMail = Ar(1)
                Buch.Kurs = Ar(2)
                Buch.Termin = Ar(3)
                Buch.MA_Name = Ar(7)
                Buch.MA_Name2 = Ar(8)
                Buch.MA_Name3 = Ar(9)
        If Ubound(ar) > 9 Then
                Buch.MA_Name4 = Ar(10)
                Buch.MA_Name5 = Ar(11)
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:
  • Phiant
Top
#15
Vielen lieben Dank!

Genau so funktioniert es :) Ich habe viele If-Kombinationen ausprobiert, aber das mit dem UBound eben nicht...Dafür hab ich diese Woche mit einem VBA Kurs angefangen. Ohne jeden Baustein des Codes zu verstehen, ist es immer unheimlich schwer diesen weiterzuschreiben bzw. anzupassen.

Danke Fennek für die tolle Vorlage, dieses "unmöglichen" Projekts und danke schauan für den Feinschliff  100

Grüße,
Phiant
Top


Gehe zu:


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