Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1324to1328
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 Per VBA an freigegebenen Kalender senden

Termine Per VBA an freigegebenen Kalender senden
26.07.2013 16:38:14
Karl-Ludwig
Hi zusammen,
ganz langsam nähere ich mich der Ziellinie.
Natürlich muss da noch ein Klotz im Weg liegen :-/
der folgende Code funktioniert wunschgemäß, außer das dieser eigentlich die Termine in den freigegebenen Kalender "Versandplan" eintragen sollte.
Hat jemand hier die Zeit und Lust bei diesem Problem zu helfen?
Vorab vielen Dank+ Gruß KL
Sub Termin_in_Versandplan()
Dim OutApp As Object
Dim apptOutApp As Object
Worksheets("Gesamt").Range("K9:K65535").SpecialCells(xlCellTypeVisible).Select
Do Until ActiveCell.Value = ""
Set OutApp = CreateObject("Outlook.Application")
Set apptOutApp = OutApp.CreateItem(1) 'olAppointmentItem)
With apptOutApp
.Start = Format(ActiveCell.Value, "dd.mm.yyyy") & " " & _
Format(ActiveCell.Offset(0, 1).Value, "hh:mm")
.Subject = ActiveCell.Offset(0, -10) & " " & ActiveCell.Offset(0, -9) & " " _
& ActiveCell.Offset(0, -6) & _
" " & " " & ActiveCell.Offset(0, -4) & " " & ActiveCell.Offset(0, -3) & " _
Stk. / " & ActiveCell.Offset(0, -2) & _
" mm / " & ActiveCell.Offset(0, -1) & " t."
.Duration = "60"
.Save
End With
ActiveCell.Offset(1, 0).Select
Set apptOutApp = Nothing
Set OutApp = Nothing
Loop
MsgBox "Die Termine wurden in den Versandplan eingetragen!"
End Sub

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Termine Per VBA an freigegebenen Kalender senden
27.07.2013 08:12:10
Oberschlumpf
Hi KL
Hast du auch schon mal Google gefragt?
Schau mal hier:
http://www.office-loesung.de/ftopic569807_0_0_asc.php
Da steht zwar in der Frage etwas von ACCESS, aber Outlook wird in jedem VBA mit dem gleichen Code angesprochen.
Hilfts?
Ciao
Thorsten

AW: Termine Per VBA an freigegebenen Kalender senden
27.07.2013 08:51:10
Karl-Ludwig
Hi Thorsten,
ich habe schon einiges im Netz gefunden
Dieses funktioniert mit dem gewünschten Ergebnis in Outlook- leider nicht in Excel :-(
Fehler beim Kompilieren:
Benutzerdefinierter Typ nicht definiert
Wie muss ich das anpassen, dass das Makro auch in Excel 2010 oder 2003 im Allgemeinen funktioniert?- die Anpassung des Termins ist kein Problem.
Any ideas?
Gruß
KL
Sub CreateOtherUserAppointment()
Dim objApp As Outlook.Application
Dim objNS As Outlook.NameSpace
Dim objFolder As Outlook.MAPIFolder
Dim objDummy As Outlook.MailItem
Dim objRecip As Outlook.Recipient
Dim objAppt As Outlook.AppointmentItem
Dim strMsg As String
Dim strName As String
On Error Resume Next
' ### name of person whose Calendar you want to use ###
strName = "Versandplan"
Set objApp = CreateObject("Outlook.Application")
Set objNS = objApp.GetNamespace("MAPI")
Set objDummy = objApp.CreateItem(olMailItem)
Set objRecip = objDummy.Recipients.Add(strName)
objRecip.Resolve
If objRecip.Resolved Then
On Error Resume Next
Set objFolder = _
objNS.GetSharedDefaultFolder(objRecip, _
olFolderCalendar)
If Not objFolder Is Nothing Then
Set objAppt = objFolder.Items.Add
If Not objAppt Is Nothing Then
With objAppt
.Subject = "Test Appointment"
.Start = Date + 14
.AllDayEvent = True
.Save
End With
End If
End If
Else
MsgBox "Could not find " & Chr(34) & strName & Chr(34), , _
"User not found"
End If
Set objApp = Nothing
Set objNS = Nothing
Set objFolder = Nothing
Set objDummy = Nothing
Set objRecip = Nothing
Set objAppt = Nothing
End Sub

Anzeige
AW: Termine Per VBA an freigegebenen Kalender senden
27.07.2013 09:00:49
Oberschlumpf
Hi KL
ich vermute, du musst im VBE über Extras/Verweise den Verweis auf MS Outlook setzen.
Ich weiß aber nicht, wie ganz genau dieser Verweis heißt, glaube aber, wenn du ihn siehst, erkennst du ihn.
Hilfts?
Ciao
Thorsten

AW: Termine Per VBA an freigegebenen Kalender senden
27.07.2013 09:11:16
Karl-Ludwig
Ha!
Kaum macht man es richtig, schon funktioniert es! :-)
Die beiden Punkte aktiviert:
Microsoft Outlook 14.0 Object Library
Microsoft Outlook View Control
Jetzt muss ich noch ein wenig basteln- aber da sollte nix mehr schief gehen :-)
Danke vielmals!
Gruß+schönes WE
KL

schön, freut mich :-)...noch etwas
27.07.2013 09:23:31
Oberschlumpf
Hi KL,
den Code, oder den Einsatz, wie du ihn for den Outlook-Zugriff verwendest, nennt man EARLY BINDING.
In diesem Fall ist das Setzen von Verweisen erforderlich - wie du ja gemerkt hast.
Das hat den Nachteil, wenn du deine Datei weitergibst, dass dann auf jedem anderen PC, auf dem der Code laufen soll, diese Verweise gesetzt werden müssen - manuell, denn meines Wissens ist das per VBA nicht möglich.
Du könntest den Outlook betreffenden Code in der Art umschreiben, dass man das Ganze dann LATE BINDING nennt.
Wenn du das geschafft hast, kannst du die zuvor gesetzten Verweise wieder entfernen, und der Code funktioniert trotzdem so, wie von dir gewünscht - ach ja, und du könntest die Datei problemlos verteilen, da auch nieman anderes Verweise setzen muss ;-)
Such einfach mal bei Google Erklärungen/Unterschiede zu Early und Late Binding.
Dieser Text von mir ist natürlich kein Muss, sondern nur eine Kann-Alternative, wenn du dazu Lust hast.
Ciao
Thorsten

Anzeige
AW: Termine Per VBA an freigegebenen Kalender senden
27.07.2013 09:31:09
Karl-Ludwig
Na doch nicht so einfach :-(
bekomme immernoch die gleiche Fehlermeldung
Sub CreateOtherUserAppointment()
Dim objApp As Object
Dim objNS As Outlook.Namespace
Dim objFolder As Outlook.MAPIFolder
Dim objDummy As Outlook.MailItem
Dim objRecip As Outlook.Recipient
Dim objAppt As Outlook.AppointmentItem
Dim strMsg As String
Dim strName As String
On Error Resume Next
Worksheets("gesamt").Range("K9:K65535").SpecialCells(xlCellTypeVisible).Select 'X
Do Until ActiveCell.Value = "" 'X
' ### name of person whose Calendar you want to use ###
strName = "Versandplan"
Set objApp = CreateObject("Outlook.Application")
Set objNS = objApp.GetNamespace("MAPI")
Set objDummy = objApp.CreateItem(olMailItem)
Set objRecip = objDummy.Recipients.Add(strName)
objRecip.Resolve
If objRecip.Resolved Then
On Error Resume Next
Set objFolder = _
objNS.GetSharedDefaultFolder(objRecip, _
olFolderCalendar)
If Not objFolder Is Nothing Then
Set objAppt = objFolder.Items.Add
If Not objAppt Is Nothing Then
With objAppt
.Start = Format(ActiveCell.Value, "dd.mm.yyyy") & " " & _
Format(ActiveCell.Offset(0, 1).Value, "hh:mm")
.Subject = ActiveCell.Offset(0, -10) & " " & ActiveCell.Offset(0, -9) _
& " " & ActiveCell.Offset(0, -6) & _
" " & " " & ActiveCell.Offset(0, -4) & " " & ActiveCell.Offset(0, -3) _
& " Stk. / " & ActiveCell.Offset(0, -2) & " mm / " & _
ActiveCell.Offset(0, -1) &" t."
.Duration = "60"
.Save
End With
End If
End If
Else
MsgBox "Could not find " & Chr(34) & strName & Chr(34), , _
"User not found"
End If
ActiveCell.Offset(1, 0).Select
Set objApp = Nothing
Set objNS = Nothing
Set objFolder = Nothing
Set objDummy = Nothing
Set objRecip = Nothing
Set objAppt = Nothing
Loop
MsgBox "Die Termine wurden in den Versandplan eingetragen!"
End Sub
Noch einen Tip evtl?
Komischerweise hat es 1 x funktioniert =:-O
Gruß
KL

Anzeige
AW: Termine Per VBA an freigegebenen Kalender senden
27.07.2013 09:34:22
Oberschlumpf
ne Bsp-Datei wär klasse
ich weiß ja nich, wie deine Datei aufgebaut is

AW: Termine Per VBA an freigegebenen Kalender senden
27.07.2013 10:52:28
Karl-Ludwig
Hi Thorsten,
hier die Datei.
https://www.herber.de/bbs/user/86587.xls
Jetzt funktionierte es wieder (die Häkchen bei den Verweisen waren weg)
Natürlich bin ich an Deinem Vorschlag zum Thema Late Binding interessiert- das übersteigt allerdings meine Fähigkeiten :-/
Ist das ein großer Aufwand?
Gruß
KL

AW: Termine Per VBA an freigegebenen Kalender senden
27.07.2013 10:59:59
Oberschlumpf
Hi KL
Wenn der Grund für 1x es geht und oft x es geht nicht die fehlenden Haken bei den Verweisen waren, dann hast du den Fehler doch schon gefunden, und ich brauch die Bsp-Datei ja nicht mehr - trotzdem danke.
Was das Early + Late Binding betrifft, wollt ich dich nur darüber informieren, dass es diese Möglichkeiten gibt. Dass aber ich die die Unterschiede erkläre + entsprechende Bsp-Codes erstelle, sorry, so war das nicht gemeint :-)
Ciao + weiterhin viel Spaß + Erfolg beim Programmieren + vllt bis zum nächsten Mal, wenn du ne Frage hast
Thorsten

Anzeige
AW: Termine Per VBA an freigegebenen Kalender senden
27.07.2013 11:06:36
Karl-Ludwig
Hi Thorsten,
Was das Early + Late Binding betrifft, wollt ich dich nur darüber informieren, dass es diese
Möglichkeiten gibt. Dass aber ich die die Unterschiede erkläre + entsprechende Bsp-Codes erstelle,
sorry, so war das nicht gemeint :-)

Schade ;-)
Hätte sein können, dass das nur 2 Handgriffe sind. Ich werde mich mal bei Gelegenheit einlesen.
Vielen Dank auf jeden Fall für Deine Hilfe
Viele Grüße
KL

AW: Termine Per VBA an freigegebenen Kalender senden
27.07.2013 16:15:07
Martin
Hallo KL,
schau mal hier, auf dieser Seite sind die Unterschiede zwischen Early Binding und Late Binding erklärt: http://msdn.microsoft.com/en-us/library/office/bb206737(v=office.12).aspx
Late Binding hat - wie Torsten schon erklärt hat - den Vorteil, dass dein Code auf jedem Rechner läuft (vorausgesetzt, dass Outlook installiert ist), weil kein Verweis zur entsprechenden Objekt-Bibliothek gesetzt werden muss. Aber es gibt auch einen entscheidenden Nachteil: Da der Verweis (also eine Verbindung) zu Outlook hergestellt werden muss, nimmt der Code geringfügig mehr Zeit in Anspruch. Was mich nun an deinem Code überrascht ist, dass offensichlich bei der Variablendeklaration ein Verweis (also Early Binding) vorausgesetzt wird, aber die tatsächliche Verbindung über Late Binding hergestellt wird. Theoretisch muss du nur die Zeilen
    Dim objApp As Outlook.Application
Dim objNS As Outlook.NameSpace
Dim objFolder As Outlook.MAPIFolder
Dim objDummy As Outlook.MailItem
Dim objRecip As Outlook.Recipient
Dim objAppt As Outlook.AppointmentItem
durch
    Dim objApp As Object
Dim objNS As Object
Dim objFolder As Object
Dim objDummy As Object
Dim objRecip As Object
Dim objAppt As Object
ersetzen. Ich denke, dass dann keine Verweise mehr auf die Objekt-Bibliothek erforderlich sind.
Viele Grüße
Martin

Anzeige
AW: Termine Per VBA an freigegebenen Kalender senden
28.07.2013 09:29:43
Karl-Ludwig
Vielen Dank Martin!
Den Artikel werde ich mir mal zu Gemüte führen.
Die Änderungen waren wirklich einfach und funktionieren :-)
ein kleines Problem habe ich noch- nicht tragisch aber unschön.
wenn ich den Datumsfilter auf den Zeitraum 29.07- 02.08 setze, wird trotzdem der Termin am 07.08. in den Versandplan eingetragen.
Das muss irgendwie an diesen Zeilen liegen:
Worksheets("gesamt").Range("K9:K65535").SpecialCells(xlCellTypeVisible).Select
Do Until ActiveCell.Value = ""
Die Schleife läuft bis zur ersten leeren Zelle.
Wie schreibe ich das am besten, dass nur die gefiltertern (sichtbaren Zellen) durchlaufen werden.
Viele Grüße
KL
Gruß
KL

Anzeige
AW: Termine Per VBA an freigegebenen Kalender senden
29.07.2013 07:53:24
Martin
Hallo Karl-Ludwig,
mach doch einfach eine Wenn-Abfrage, ob die jeweilige Zelle sichtbar ist:
    Do Until ActiveCell.Value = ""
If Not ActiveCell.EntireRow.Hidden = True Then
'Hier Dein Code
End If
ActiveCell.Offset(1, 0).Range("A1").Select
Loop
Beachte lediglich, dass der Wechsel in die nächste Zeile (ActiveCell.Offset(1, 0).Range("A1").Select) unterhalb des End If steht, sonst hast du eine Endlosschleife.
Viele Grüße
Martin

AW: Termine Per VBA an freigegebenen Kalender senden
29.07.2013 10:12:46
Karl-Ludwig
Perfekt!
Vielen Dank Martin
Gruß
KL
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige
Archiv - Verwandte Themen
Forumthread
Beiträge