Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Makro, um Anfahrts-Termine zu erstellen

1,442 views
Skip to first unread message

Gunther Lepski

unread,
Mar 28, 2011, 10:23:17 AM3/28/11
to
Hallo NG,

ich hab eine ähnliche Frage hier schonmal gesehen, finde sie jedoch
nicht mehr.

Ich suche ein Makro (bzw. jemanden, der eins schreibt), für folgende
Aufgabe:

Ich gebe in OL einen Termin ein, mit Start- und Endzeit; markiere ihn;
und nun möchte ich mit einem Klick das Makro starten und es soll mir
direkt vor und nach dem Termin zwei weitere erstellen mit dem Betreff
Anfahrt (bzw Rückfahrt). Von mir aus mit Dauer 1 Stunde, schöner wär
jedoch, wenn noch eine Abfrage käme, mit welcher Fahrtzeit ich rechne.

Gibts dafür schon was?

Oder kann das jemand in VBA programmieren?

--

Grüße aus Schwaben

Gunther


Gunther Lepski

unread,
Apr 2, 2011, 1:21:26 PM4/2/11
to
Nur um sicherzugehen, ist mein Posting sichtbar? Oder hat einfach keiner
eine Antwort?

Herrand Petrowitsch

unread,
Apr 2, 2011, 1:57:37 PM4/2/11
to
"Gunther Lepski" schrieb

> Nur um sicherzugehen, ist mein Posting sichtbar?

Ja ;-)

> Oder hat einfach keiner eine Antwort?

Diese NGs könnten dich interessieren:
de.comp.lang.dotnet.vb, de.comp.lang.vbclassic.

HTH

--
Gruß Herrand

Ahmed Martens

unread,
Apr 4, 2011, 2:17:47 AM4/4/11
to
Hallo Gunther,

Am Sat, 2 Apr 2011 19:21:26 +0200 schrieb Gunther Lepski:

> Nur um sicherzugehen, ist mein Posting sichtbar? Oder hat einfach keiner
> eine Antwort?


ist, wenn man es verstanden hat, relativ trivial.

Hier eine Funktion aus meinem VB-Programm um einen Outlook-Termin zu
erstellen:

<Code>

Dim appOutLook As Outlook.Application
Dim taskOutLook As Outlook.TaskItem
Dim myUserProperty As Outlook.UserProperty

360 Set appOutLook = CreateObject("Outlook.Application")
370 Set taskOutLook = appOutLook.CreateItem(olTaskItem)


380 With taskOutLook

'Betreff und Body der Aufgabe
390 .Subject = frm.xptxtBetreff 'Betreff setzen
400 .Body = frm.xptxtBody 'Body setzen
410 .Companies = frm.xptxtMdNr '(Feld: Firma)
'.Categories = vZusatzinfo(1)
420 On Error Resume Next
430 x = .UserProperties.Count

'Hinzufügen UserProperties und mit Wert befüllen
440 Set myUserProperty = .UserProperties.Add("Dateiname", olText)
450 myUserProperty.Value = vZusatzinfo
460 Set myUserProperty = .UserProperties.Add("Pfad", olText)
470 myUserProperty.Value = frm.xpVerzID

'Fälligkeitsdatum setzen, Wichtig: Halten Sie diese Reihenfolge ein
'Erst die Fälligkeit und den Beginn,
'erst dann Erinnerungszeit setzen


480 .DueDate = CDate(tmpDueDate) 'Fällig am
490 .Startdate = CDate(frm.xpDTPicker_Datzum(0).Text & " " & Format(Now(), "hh:mm")) 'Beginnt am


'Erinnerungszeit setzen
'.ReminderOverrideDefault = True 'Nur, falls User in OL Unsinn eingestellt hat
'(3 Vorschläge für Setzen der Erinnerung)



500 .Remindertime = Format(CDate(frm.xpDTPicker_Datzum(2).Text & " " & frm.xpcmbZeit(1).Text)) 'Datum aus Formular - Zeit fest
'.ReminderTime = Termin & " " & ZeitT 'Datum und Zeit aus Access-Formular
'.ReminderTime = DateAdd("h", 1, Now)
510 .ReminderSet = frm.xpchkErinnerung.Value 'Reminder einschalten
520 .ReminderPlaySound = False
'.Categories = "test"
'.GetRecurrencePattern für Terminserien

'Pfad zu einer .wav Datei
'.ReminderSoundFile = "C:\Windows\Media\Ding.WAV"

'Entweder Sichern oder Anzeigen
530 .Importance = olImportanceNormal
540 .Save '(Sichern o. Anzeige)
'.Display '(Sichern u. Anzeige)
550 End With

560 Set taskOutLook = Nothing
570 Set appOutLook = Nothing

</Code>


Gruß Ahmed
--
Antworten bitte nur in der Newsgroup.

Gunther Lepski

unread,
Apr 4, 2011, 4:05:22 AM4/4/11
to
Danke, aber sorry, das überfordert mich jetzt.
Ich könnte das zwar in den VB-Editor einfügen, und starten, aber mir
fehlen die Kenntnisse den Code an meine Bedürfnisse anzupassen.
Was macht denn dieser Code genau?

Ahmed Martens

unread,
Apr 4, 2011, 4:15:49 AM4/4/11
to
Am Mon, 4 Apr 2011 10:05:22 +0200 schrieb Gunther Lepski:

> Danke, aber sorry, das überfordert mich jetzt.
> Ich könnte das zwar in den VB-Editor einfügen, und starten, aber mir
> fehlen die Kenntnisse den Code an meine Bedürfnisse anzupassen.
> Was macht denn dieser Code genau?

Der erstellt in OL einen Termin! ;-)

Nun man muss sich in die Outlook-Objektrefenzen einlesen und auch etwas
von Programmierung verstehen.

Von wo möchtest Du denn den Termin erstellen?
Hast Du dafür ein eigenes Programm?

Gunther Lepski

unread,
Apr 4, 2011, 10:04:46 AM4/4/11
to
>
> Von wo möchtest Du denn den Termin erstellen?
> Hast Du dafür ein eigenes Programm?
>

Ich wollte direkt im Outlook-Kalender einen Termin markieren und dann 2
direkt anschliessende Termine erstellen lassen.

Gunther Lepski

unread,
Apr 4, 2011, 10:12:37 AM4/4/11
to
>
> Von wo möchtest Du denn den Termin erstellen?
> Hast Du dafür ein eigenes Programm?
>

Ich wollte direkt im Outlook-Kalender einen Termin markieren und dann 2


direkt anschliessende Termine erstellen lassen.

--
Grüße aus Schwaben

Gunther

Ahmed Martens

unread,
Apr 8, 2011, 3:57:07 AM4/8/11
to
Hallo Gunter,

hier jetzt eine fertige Funktion (bitte anpassen).

Einfach diese Sub in Outlook-VBA-Modul kopieren und schon steht sie als
Makro zur Verfügung. Ich habe alle wichtigen Komponenten betextet.
Erinnerungszeit habe ich auf 60 Minuten eingestellt. Aus dem
selektierten Termin wird jetzt 1 Tag vorher und 1 Tag nachher neue
Termine mit gleichen Inhalt erstellt.

Natürlich kann man auch mehrere Termine gleichzeitig markieren.

Und hier nun die Prozedur:

<Code>

Sub Create_Termin()

Dim myOlExp As Outlook.Explorer
Dim myOlSel As Outlook.selection
Dim Item As Outlook.AppointmentItem
Dim i As Long

'für neuen termin
Dim OutlookItem As Object
Dim myNamespace As Outlook.NameSpace
Dim OutlookCalendar As Outlook.Folder


' Edit


10 On Error GoTo Create_Termin_Error

20 Set myOlExp = Application.ActiveExplorer
30 Set myOlSel = myOlExp.selection


40 If myOlSel.Count = 0 Then
50 MsgBox "Sie müssen mind. 1 Termin auswählen."
60 Exit Sub
70 End If

80 For i = 1 To myOlSel.Count


90 Set Item = myOlSel(1)
100 If TypeOf Item Is Outlook.AppointmentItem Then

110 Set myNamespace = Application.GetNamespace("MAPI")
120 Set OutlookCalendar = myNamespace.GetDefaultFolder(olFolderCalendar)

130 Set OutlookItem = OutlookCalendar.Items.Add

140 With OutlookItem
150 .Subject = Item.Subject 'Betreff
160 .Location = Item.Location 'Ort
170 .Body = Item.Body 'Text
180 .Start = DateAdd("d", -1, CDate(Item.Start)) 'Beginnt am
190 .End = DateAdd("d", -1, CDate(Item.End)) 'Endet am
' .Duration = 30 'Länge des Termins in Minuten
200 .ReminderSet = True 'Erinnerung setzen
210 .ReminderMinutesBeforeStart = 60 'Minuten
220 .Save

230 End With


240 Set OutlookItem = OutlookCalendar.Items.Add

250 With OutlookItem
260 .Subject = Item.Subject
270 .Body = Item.Body
280 .Start = DateAdd("d", 1, CDate(Item.Start)) 'Beginnt am
290 .End = DateAdd("d", 1, CDate(Item.End)) 'Endet am
' .Duration = 30 'Länge des Termins in Minuten
300 .ReminderSet = True 'Erinnerung setzen
310 .ReminderMinutesBeforeStart = 60
320 .Save

330 End With

340 Else

350 MsgBox "Nur Termine sind erlaubt!"

360 End If

370 Next

380 On Error GoTo 0
390 Exit Sub

Create_Termin_Error:

400 MsgBox "Fehlernr.: " & Err.Number & " (" & Err.Description & ") in Prozedur Create_Termin von Modul ThisOutlookSession", , "Fehler in Zeile: " & Erl
End Sub

</Code>

Ahmed Martens

unread,
Apr 8, 2011, 3:59:01 AM4/8/11
to
Am Fri, 8 Apr 2011 09:57:07 +0200 schrieb Ahmed Martens:

> 90 Set Item = myOlSel(1)

90 Set Item = myOlSel(i)

Bitte die 1 durch i austauschen!

Gunther Lepski

unread,
Apr 8, 2011, 5:35:47 AM4/8/11
to
Klasse, Ahmed, danke!
Ich hab noch ein wenig geändert, dein Beispiel erstellt Termine an den
angrenzenden Tagen, ich wollte Termine, die zeitlich direkt
anschliessen.
Habs jetzt so gemacht:
<Code>

140 With OutlookItem
150 .Subject = "Anfahrt"
'Betreff
159 .Location = Item.Location
'Ort
160 .Categories = "Reise"
'Kategorie


170 .Body = Item.Body
'Text

180 .Start = DateAdd("n", -30,
CDate(Item.Start)) 'Beginnt am
185 ' .End = DateAdd("d", -1, CDate(Item.End))
'Endet am
190 .Duration = 30


'Länge des Termins in Minuten
200 .ReminderSet = True
'Erinnerung setzen
210 .ReminderMinutesBeforeStart = 60
'Minuten
220 .Save

230 End With

</Code>

Damit ist die Dauer aber immer auf 30 min festgelegt.
Könntest du noch eine Abfrage nach der gewünschten Dauer in Minuten
einbauen?
-----------------------------------------------------

mfG
Gunther Lepski


Ahmed Martens

unread,
Apr 8, 2011, 6:10:20 AM4/8/11
to
Hier die Lösung:

Dim s As String

s = InputBox("Geben Sie bitte die Minuten ein.", "Titel Minuten", "30")
If s = "" Then MsgBox "Sie haben keine Minuten eingeben."

[...]

.Start = DateAdd("n", cint(s)*-1, CDate(Item.Start)) 'Beginnt am

[...]

Gunther Lepski

unread,
Apr 8, 2011, 7:14:44 AM4/8/11
to
Danke schön für die Hilfe, jetzt passts!

birdal...@gmail.com

unread,
Nov 5, 2012, 10:28:25 AM11/5/12
to
vielen dankeschön.

nach ein paar kleinen anpassungen läuft es auch bei mir hervorragendst.

danke

rade...@gmail.com

unread,
Jul 10, 2018, 10:56:49 AM7/10/18
to
Hallo Ahmed,

hast du vielleicht auch eine Lösung für mich?
Ich habe einen Ganztägigen Termin, den ich an einem bestimmten Betreff erkennen kann. Beispiel "Termin Hannover" und ich weiss das ich generell um 7 Uhr losfahre und 2 h brauche. Für diese Zeit würde ich jetzt gerne einen Termin am gleichen Tag von 7 bis 9 Uhr, mit einer bestimmten Kategorie anlegen, um die Fahrzeit nach Hannover auch im Kalender zu haben.

Könntest du mir helfen ?

Viele Grüße
Thomas
0 new messages