Outlook über OLE steuern?



  • Ok, in der (Excel & Word)-Hilfe unter VBA wird für "OlePropertyGet" nichts gefunden! Im www habe ich auch noch nix passendes gefunden...



  • Bei der allgemeinen Frage kann ich momentan auch nicht helfen, aber der Code scheint doch einen konkreten Fehler zu haben. Du willst sowohl die Kalenderliste als auch einen einzelnen Kalender über den identischen Funktionsaufruf vKalenderFolder.OlePropertyGet ("Folders") ermitteln, das kann ja nicht funktionieren. Für das Selektieren des einzelnen Kalenders würde man doch etwas in der Art erwarten, dass der Index der Kalenderliste verwendet wird.



  • Ich verstehe den Code so, dass in Zeile 16 die Anzahl der verfügbaren Kalender gelesen wird. Dieser Wert gibt mir immer 0 zurück, wobei ich zwei Kalender zur Verfügung habe.
    Also ist doch an dieser Stelle (vermutlich schon weiter oben) etwas nicht korrekt???



  • Ja, es wäre zu kontrollieren, ob die Funktionsaufrufe in Zeile 12 bis 15 überhaupt korrekte Ergebnisse liefern.
    Das ändert nichts daran, dass Zeile 17 so eigentlich nicht funktionieren kann.

    Hast du mal den Link zu Hand, aus dem dein Beispielcode stammt?



  • Den Code habe ich hier gefunden: http://www.c-plusplus.net/forum/265420

    Aus Zeile 17 habe ich das "...,1 )" entfernt, da die 1 leider "außerhalb des Array-Index" ist. Ist ja auch klar, da mir "..."Count"" 0 ausgiebt. Also findet er doch gar keinen Kalender?



  • Wie gesagt, man müsste erstmal prüfen, ob die vorhergehenden Aufrufe erfolgreich waren. Hier wird so eine Auswertung diskutiert: http://borland.public.cppbuilder.activex.narkive.com/ioMlTzuP/outlook-automation-and-return-values
    Ich benutze selbst kein MS Office und kann deshalb nicht testen, was der Debugger für die Variants ausspucken sollte.



  • torsten_156 schrieb:

    Ok, in der (Excel & Word)-Hilfe unter VBA wird für "OlePropertyGet" nichts gefunden!

    Das ist ja auch eine C++Builder-Funktion. Die Dinge, deren Namen du an CreateOleObject(), OleFunction(), OlePropertySet/Get() übergibst, die stehen womöglich in der Outlook-VBA-Hilfe, aber sicher nicht in der Word- oder Excel-VBA-Hilfe.



  • Selbst in der Outlook-VBA-Hilfe habe ich dazu nichts gefunden 😞

    Gruß
    Torsten



  • Hallo,
    ich habe es nun fast geschafft. Der Termin wird wie gewünscht in meinem Outlook-Kalender eingetragen, Teilnehmer zugefügt 😋
    Die Teilnehmer stehen auch in meinem Kalender, nur leider werden diese nicht darüber benachrichtigt 😞 Da fehlt wohl noch so etwas wie "sende den Termin" 😕

    Hier mein jetziger Code:

    //Outlook soll geöffnet werden
    Variant vOutlook,vTermin;
      double dStartDatum = StrToDateTime("29.12.2012 10:30:00");
      double dEndDatum = StrToDateTime("29.12.2012 11:00:00");
    	//ShowMessage("Achtung, Outlook muss geöffnet sein!");
    
      try
      {
    	vOutlook = CreateOleObject("Outlook.Application");
    	vTermin=vOutlook.OleFunction("CreateItem", 1);  //olAppointmentItem
    	//Betreff
    	vTermin.OlePropertySet("Subject", "Ein Testtermin via OLE-Automation");
    	//Ort
    	vTermin.OlePropertySet("Location","Großer Beratungsraum");
    	//Startdatum
    	vTermin.OlePropertySet("Start",dStartDatum);
    	//Endedatum
    	vTermin.OlePropertySet("End",dEndDatum);
    	//Text
    	vTermin.OlePropertySet("Body","Das ist der Text!");
    	//Anzeige als (Kategorie)
    	vTermin.OlePropertySet("Categories","Frei");
    	//Erinnerung
    	vTermin.OlePropertySet("ReminderSet",true);
    	//Erinnerungszeit
    	vTermin.OlePropertySet("ReminderMinutesBeforeStart", 30);
    	//Teilnehmer einladen...
    	vTermin.OlePropertyGet("Recipients").OleProcedure("Add","testuser@test.com");
    	//speichern
    	vTermin.OleFunction("Save");
    
      } catch(...)
      {
       ShowMessage("Termin wurde nicht eingetragen!");
      }
      //vOutlook.OleFunction("Quit");
      vOutlook = Unassigned;
    

    Wie gesagt, soweit klappt alles. Bis auf das Senden...

    Gruß
    Torsten



  • Ich habe da im www noch etwas Code gefunden, der womöglich das Problem mit dem Senden des Termins löst. Leider komme ich nicht ganz dahinter, wie ich das nach C++ portieren kann. Vieleicht kann mir ja jemand dabei helfen...

    Variant Outlook;
    		Outlook = CreateOleObject("Outlook.Application");
    		AppointmentItem newAppointment = ("Outlook.AppointmentItem");
    		this.CreateItem(Outlook.OlItemType.olAppointmentItem);
    		newAppointment.Start = DateTime.Now.AddHours(2);
    		newAppointment.End = DateTime.Now.AddHours(3);
    		newAppointment.Location = "ConferenceRoom #2345";
    		  newAppointment.Body = "We will discuss progress on the group project.";
    		newAppointment.AllDayEvent = false;
    		newAppointment.Subject = "Group Project";
    		newAppointment.Recipients.Add("Roger Harui");
    		Outlook.Recipients sentTo = newAppointment.Recipients;
    		Outlook.Recipient sentInvite = null;
    		sentInvite = sentTo.Add("Holly Holt");
    		sentInvite.Type = (int)Outlook.OlMeetingRecipientType.olRequired;
    		sentInvite = sentTo.Add("David Junca ");
    		sentInvite.Type = (int)Outlook.OlMeetingRecipientType.olOptional;
    		sentTo.ResolveAll();
    		newAppointment.Save();
    		newAppointment.Display(true);
    

    Was ich meine, fängt ab Zeile 12 an.

    Gruß Torsten



  • Ich benötige da mal eure Hilfe. Wie ich lesen konnte, sollte man mal im Outlook den Macro-Recorder mitlaufen lassen. Nur leider gibt es den in der Office-Version 2007 nicht mehr. Aber in Office97 soll es den noch geben. Hat jemand diese Version noch auf dem Rechner? Wenn ja, kann mir dann jemand den Code aufzeichnen???
    Vielen Dank


Anmelden zum Antworten