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
> 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
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.
> 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?
Ich wollte direkt im Outlook-Kalender einen Termin markieren und dann 2
direkt anschliessende Termine erstellen lassen.
Ich wollte direkt im Outlook-Kalender einen Termin markieren und dann 2
direkt anschliessende Termine erstellen lassen.
--
Grüße aus Schwaben
Gunther
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>
> 90 Set Item = myOlSel(1)
90 Set Item = myOlSel(i)
Bitte die 1 durch i austauschen!
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
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
[...]