Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1336to1340
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Termine über Outlook aus Excel

Termine über Outlook aus Excel
12.11.2013 13:00:12
Jeanette
Hallo zusammen,
ich habe eine Matrix in Excel 2010 und möchte die termine per Outlook versenden.
Das heißt in der Spalte A stehen meine Namen der PErsonnen die an einen bestimmten Tag einen Rundgang durchführen sollen.
In der Zeile F2 bis AV 2 stehen die Bezeichnungen der Bereiche die besucht werden sollen.
Ab F4 bis AV 31 stehen Zahlen, z.B. eine 14. Dies ist der Tag an dem die Personen einen Rundgang starten soll.
In A1 Steht der Monat z.B. November.
Nun möchte ich, das Excel automatisch die Tabelle durchsucht und den Herrn x informiert das er heute (eventuell einen Tag vorher, das er morgen...)einen Rundgang im Bereich x durchzuführen hat.
Ich hoffe ich habe es etwas ausführlich geschrieben und mir kann jemand helfen.
Super vielen Dank für die Hilfe schon einmal vorab.
Grüße Jeanette

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Termine über Outlook aus Excel
12.11.2013 15:59:51
Tino
Hallo,
habe dir hier mal was zusammengebaut. (bitte erst testen, nicht ausgiebig getestet)
Ich würde mir in der Liste einen Vermerk erstellen
das heute an die Person aus Spalte A schon der Termin gesendet wurde,
sonst wird da schnell eine Mailbombe daraus.
Die Tabelle wo die Daten stehen müsstest Du noch anpassen.
Sub Start_Terminvergabe()
Dim ArrData(), ArBereiche()
Dim n&, nn&, nCount&
Dim SuchDate As Date, ValueDate As Date
Dim intJahr%, intMonat%, AnzahlTermine%
Dim strAufzahlungszeichen$

strAufzahlungszeichen = Chr(183)

With Tabelle1 'Tabelle anpassen 
    ArrData = .Range("A2:AV31").Value
    SuchDate = CDate(Day(Date) & "." & .Range("A1") & "." & Year(Date)) + 1
    If Month(SuchDate) <> Month(Date) Then
        If DateDiff("m", Date, SuchDate) > 1 Then
            MsgBox Format(SuchDate, "'mmmm.yyyy'") & " liegt zu weit in der Zukunft!"
            Exit Sub
        End If
        If MsgBox("Sollen die Termine für den Monat " & Format(SuchDate, "'mmmm'") & _
                  " gesendet werden werden?", vbYesNo + vbQuestion) = vbNo Then
            Exit Sub
        End If
    End If
    intJahr = Year(SuchDate)
    intMonat = Month(SuchDate)
End With

For n = 3 To Ubound(ArrData)
    Redim Preserve ArBereiche(Ubound(ArrData, 2))
    If ArrData(n, 1) <> "" Then
        For nn = 6 To Ubound(ArrData, 2)
            If ArrData(n, nn) <> "" Then
                If IsNumeric(ArrData(n, nn)) Then
                    ValueDate = DateSerial(intJahr, intMonat, ArrData(n, nn))
                    If ValueDate = SuchDate Then
                        ArBereiche(nCount) = vbTab & strAufzahlungszeichen & ArrData(1, nn)
                        nCount = nCount + 1
                    End If
                End If
            End If
        Next nn
    End If
    If nCount > 0 Then
        Redim Preserve ArBereiche(nCount - 1)
        SendTermin ArrData(n, 1), SuchDate, ArBereiche
        AnzahlTermine = AnzahlTermine + 1
    End If
    Erase ArBereiche: nCount = 0
Next n
MsgBox "Es wurden " & AnzahlTermine & " versendet"
End Sub

Sub SendTermin(ByVal strName$, ByVal TermDatum As Date, ArBereiche())
Dim strBody$
Dim outApp As Outlook.Application
Dim outTermin As AppointmentItem
'Prüfen ob Outlook gestartet ist 
Call Open_Outlook

strBody = Join(ArBereiche, vbCr)
strBody = "Hallo," & vbCr & "in folgenden Bereich(en) steht für morgen den " & _
           Format(TermDatum, "dd.mm.yyyy") & _
           " ein Rundgang an!" & String(3, vbCr) & strBody

Set outApp = New Outlook.Application
Set outTermin = outApp.CreateItem(olAppointmentItem)
With outTermin
'    .Display 
    .Importance = olImportanceHigh
    .MeetingStatus = olMeeting
    .Location = "Rundgang im Bereich" 'Ort 
    .Recipients.Add strName 'an 
    .AllDayEvent = True
    .Start = Format(TermDatum, "dd.mm.yyyy")
    .Subject = "Rundgang"
    .Body = strBody
'    .Duration = "0" '***dauer in Minuten *** 
    .ReminderMinutesBeforeStart = 0 '***Erinnerung vor Start in Minuten *** 
    .Send 'senden 
    'Sendkeys "%S" '*** automatisch ohne überprüfung senden !!!nur wenn sichtbar!!!*** 
    .Close False 'schließen ohne speichern, sonst True 
End With

Set outTermin = Nothing
Set outApp = Nothing
End Sub

'Prüfen ob Outlook offen, sonst starten 
Sub Open_Outlook()
Dim objOut As Object
Dim strPath$
On Error Resume Next
    Set objOut = GetObject(, "Outlook.Application")
On Error GoTo 0
If objOut Is Nothing Then
    strPath = Application.Parent.Path
    If Right$(strPath, 1) <> "\" Then strPath = strPath & "\"
    Shell strPath & "OUTLOOK.EXE", vbMinimizedFocus
End If
End Sub
Gruß Tino

Anzeige
noch was vergessen, sorry!
13.11.2013 14:54:47
Tino
Hallo,
hab vergessen noch was zu erwähnen.
Im VBA musst Du noch den Verweis auf Microsoft Outlook 14.0 Object Library setzen.
Die 14.0 (xl2010) ist von der Version abhängig.
Wenn auch andere Versionen verwendet werden, gib nochmal Bescheid!
Gehe im VBA unter Extras – Verweise und suchen dort diesen Eintrag.
Gruß Tino

AW: noch was vergessen, sorry!
14.11.2013 13:32:18
Jeanette
Hallo,
super vielen Dank für den Code. Leider bin ich nicht zum testen gekommen war 2 Tage nicht im Büro....
Jetzt noch eine Frage, muss ich das heutige Datum in irgendeine Zeile "schreiben"?
Und wie meinst du das mit dem Vermerk. Also klar damit ich nicht den selben 2 mal versende oder so.
Versende ich die Mails einzeln oder für alle Personen?
Wäre cool wenn ich dir mal die Datei senden könnte...weil VBA ist nicht mein Ding....
DANKE

Anzeige
AW: noch was vergessen, sorry!
14.11.2013 14:18:13
Tino
Hallo,
ich habe mich eigentlich an Deine Vorgaben gehalten und
erstelle mir aus dem Monatsnamen in A1 und den Tagen in der Liste und dem
aktuellem Jahr dieses Datum.
Wird aus dem Monat in A1 ein Datum das weiter als 1 Monat vom aktuellen Monat entfernt liegt kommt eine Fehlermeldung.
Ist der Monat nicht der aktuelle sondern der nächste, kommt eine Sicherheitsabfrage ob dennoch gesendet werden soll.
Ich würde mir neben den Namen das letzte sende Datum eintragen und nur senden wenn dieser nicht heute ist.
Du kannst hier eine Datei hochladen, so viel steht da ja nicht drin.
Testen würde ich dies erst mal an deinen Namen, die Liste dafür etwas kleiner machen!
Gruß Tino

Anzeige
AW: noch was vergessen, sorry!
14.11.2013 15:16:28
Jeanette
Hallo,
super vielen Dank. Ich habe mich mal unwissend durch VBA gewühlt. Und ausversehen gleich dreimal den selben Termin an die Personen versendet ohne das ich es gemerkt habe. uppssss...
Das heißt er versendet die Termine obwohl er einen Laufzeitfehler anzeigt...keine Ahnung.
Wann versendet excel jetzt eigentlich? Wenn ich speichere oder?
Kann man einen Button einfügen der den kompletten Monat versendet? Geht das?
und mir sagt versendet?
Schon viel was ich frage....sorry. Kann die Datei nicht hochladen...falsches Format obwohl Zip. Was kann ich da machen?
DANKE

Anzeige
AW: noch was vergessen, sorry!
14.11.2013 18:34:54
Tino
Hallo,
ok habe mal versucht was einzubauen.
Es werden Termine nur einmal im Monat/Person versendet (für jeden Tag ein Termin)
Info dazu wird in der Tabelle Info_Versand abgelegt (nach dem Versand speichern ;-))
Kann ein Name im Outlook nicht aufgelöst werden weil nicht vorhanden,
kommt es zu einer Fehlermeldung. (da hab ich noch nichts gefunden diese zu unterdrücken)
Kann der Name nicht aufgelöst werden weil nicht eindeutig, wird kein Fehler ausgegeben.
Diese werden als Fehler beim Versand gekennzeichnet und diese werden beim nächsten Durchlauf erneut versucht zu senden.
(könnte man noch was machen, kenne aber deine Adressbuch einstellung nicht! Global, Logal usw.)
Im Code (Start über den Button in der Tabelle1)
Mit der Zeile
.Display 'Termin Anzeigen
wird der Termin dir gezeigt, wenn nicht gewollt Hochkomma davor.
die Zeile für das direkte senden ist noch deaktiviert.
' .Send 'hier wird der Termin gesendet
Zum direkten senden das Hochkomma am Anfang entfernen.
Viel Spaß beim testen ;-)
https://www.herber.de/bbs/user/88093.xlsm
Gruß Tino

Anzeige
AW: noch was vergessen, sorry!
15.11.2013 09:48:15
Jeanette
Hallo,
super vielen dank für die Änderung. Leider kommen keine Termine an. Excel sagt zwar versendet aber keine Mail. Woran kann dies liegen?
Muss ich noch etwas ändern? Kann man den Termin zeitlich eingrenzen? Das heißt von 8:00 bis 16:00 Uhr und nicht von 0:00 - 0:00 Uhr.
DANKE bin begeistert was man alles machen kann.

AW: noch was vergessen, sorry!
15.11.2013 14:23:45
Tino
Hallo,
habe den Code für einen Zeitbereich angepasst.
Wenn Du eine andere Uhrzeit als von 08 bis 18Uhr haben willst, diese Zeilen entsprechend anpassen.
'hier die Uhrzeit anpassen
vonUhrzeit = TimeSerial(8, 0, 0)
bisUhrzeit = TimeSerial(18, 0, 0)

Hast Du wie geschrieben die Zeile ' .Send ... angepasst, erst dann wird gesendet.
Durch dieses Hochkomma ist der Rest in dieser Zeile ein Kommentar.
https://www.herber.de/bbs/user/88097.xlsm
Gruß Tino

Anzeige
AW: noch was vergessen, sorry!
15.11.2013 18:44:37
Jeanette
Wow, das funktioniert alles einwandfrei.
Das spart mir mal so eben knapp 2 Std. im Monat.
Super vielen Dank. Super Leute in diesem Forum. DANKE
Perfekt genau wie ich es haben wollte.
D A N K E

AW: noch was vergessen, sorry!
15.11.2013 18:44:46
Jeanette
Wow, das funktioniert alles einwandfrei.
Das spart mir mal so eben knapp 2 Std. im Monat.
Super vielen Dank. Super Leute in diesem Forum. DANKE
Perfekt genau wie ich es haben wollte.
D A N K E

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige