MS-Office-Forum

Zurück   MS-Office-Forum > Microsoft Office > Microsoft Outlook (Express), sonst. Mailprogramme
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads
Themen-Optionen Ansicht
Alt 16.05.2018, 14:27   #1
Andre.Heisig
MOF Koryphäe
MOF Koryphäe
Standard VBA - Outlook-Termin aus Access finden bzw. anlegen, wenn nicht gefunden.

Moin zusammen,

ich möchte gern aus Access heraus Termine updaten, wenn vorhanden bzw. anlegen, wenn nicht vorhanden. Kopplungskriterium ist [Access-Feld] TerminID zu [Outlook-Feld] "BillingInformation", eindeutiges Vorkommen.

Meine bisherigen Versuche, aus entsprechenden Google-Fundstücken übernommen, sehen so aus:

Code:

            Dim olNameSpace         As Outlook.Namespace
            Dim olKalender          As Outlook.Folder
            Dim olTermine           As Outlook.Items
            Dim olTermin            As Outlook.AppointmentItem
                    
            Set olApp = CreateObject("Outlook.Application")
            Set olNameSpace = olApp.GetNamespace("MAPI")
            Set olKalender = olNameSpace.GetDefaultFolder(olFolderCalendar)
            Set olTermine = olKalender.Items.Find("[BillingInformation]=" & rs!TerminID)
            Set olTermin = olApp.CreateItem(olAppointmentItem)
            
            
            If olTermine.count > 0 Then
            
                For Each olTermin In olTermine.Items
                                    
                    With olTermin
                        ' ...
                        Debug.Print "Update!"
                    
                    End With
                Next olTermin
                ' |============ Durchlauf vorhandener Termine ============>
            Else
            
            
        
        
        
            ' |<============ Wenn keine vorhandenen Termine gefunden, dann neu ============
                    
                With olTermin
                    ' ...
                    Debug.Print "Neu!"
                    
                    .Save
                End With
                    
            End If
            ' |============ Wenn keine vorhandenen Termine gefunden, dann neu ============>
            
            
            rs.MoveNext
        Loop
        DoEvents
ich bekomme eine Typen-Unverträglichkeitsmeldung.

Kann mich mal wer übern Berg schubsen, bitte?
Andre.Heisig ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 16.05.2018, 14:41   #2
Andre.Heisig
Threadstarter Threadstarter
MOF Koryphäe
MOF Koryphäe
Standard

Edit: Ich hab hier das gleiche Thema schonmal angefangen, sehe ich gerade. Damals noch ohne die von Markus empfohlene "Item.Find"-Methode, sondern bin über alle Termine gerauscht.

Das funktioniert nach wie vor, wird aber zunehmend langsamer, wie damals schon völlig richtig angemerkt.
Andre.Heisig ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 16.05.2018, 15:24   #3
EarlFred
MOF Guru
MOF Guru
Standard

Zitat:

Edit: Ich hab hier das gleiche Thema schonmal angefangen

.. und keine Rückmeldung an Markus gegeben. Find ich nicht prall von Dir.

Warum wird olTermin erst als neuer Termin angelegt, bevor Du überhaupt weißt, ob Du einen neuen Termin brauchst?

Wolltest Du eventuell die Restrict-Methode (anstelle Find) verwenden? Die gibt ein Items-Objekt zurück.

__________________

Datum und Uhrzeit, Makrorekorder-Code entschlacken, {Matrixformeln}
Tutorials zu Pivottabellen: Kurzeinstieg; Dynamischer Datenbereich; Daten und Zeiten gruppieren
Für 5 meiner Beiträge haben sich die Hilfesuchenden mit einer Spende an Wikipedia, die Tafeln oder Hilfe für krebskranke Kinder eV bedankt (das entspricht 0,037% per 04.04.2018) - eine tolle Geste!

Geändert von EarlFred (16.05.2018 um 15:43 Uhr).
EarlFred ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 16.05.2018, 15:56   #4
Andre.Heisig
Threadstarter Threadstarter
MOF Koryphäe
MOF Koryphäe
Standard

Zitat: von EarlFred Beitrag anzeigen

.. und keine Rückmeldung an Markus gegeben. Find ich nicht prall von Dir.

Meine damalige Anfrage war gelöst, der Hinweis von Markus ging darüber hinaus, und ich hatte schlicht nicht die Zeit, das direkt umzusetzen.

Zitat: von EarlFred Beitrag anzeigen

Warum wird olTermin erst als neuer Termin angelegt, bevor Du überhaupt weißt, ob Du einen neuen Termin brauchst?

Wolltest Du eventuell die Restrict-Methode (anstelle Find) verwenden? Die gibt ein Items-Objekt zurück.

Gute Frage. Im Kern wohl, weil ich manche Codebeispiel aus dem Web nicht bis in die Tiefe verstehe, sondern als "Blackbox" übernehme. Ich nahm einfach an, dass "Item.Find", nicht zuletzt auch weil von Markus genannt, das richtige Stichwort wäre. Item.Restrict hab ich auch in Musterlösungen gesehen, die allerdings nicht unmittelbar meine Frage trafen.

Vor allem dachte ich, da ich in meinem Fall immer einen eindeutigen Treffer (oder keinen) erziele, wäre .Find zielführender als .Restrict.
Andre.Heisig ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 16.05.2018, 18:10   #5
Andre.Heisig
Threadstarter Threadstarter
MOF Koryphäe
MOF Koryphäe
Standard

Zitat: von EarlFred Beitrag anzeigen

Warum wird olTermin erst als neuer Termin angelegt, bevor Du überhaupt weißt, ob Du einen neuen Termin brauchst?

Das war der entscheidende Tip, danke!

Das hier ...

Code:

Dim olApp   As Outlook.Application
Dim olNameSpace         As Outlook.Namespace
Dim olKalender          As Outlook.Folder
Dim olTermine           As Outlook.Items
Dim olTerminAs AppointmentItem
        
Set olApp = CreateObject("Outlook.Application")
Set olNameSpace = olApp.GetNamespace("MAPI")
Set olKalender = olNameSpace.GetDefaultFolder(olFolderCalendar)


Set olTermine = olKalender.Items.Restrict("[BillingInformation]=" & rs!TerminID)

Select Case olTermine.count
    
    Case 0  ' |<============ Termin neu ============

        Set olTermin = olApp.CreateItem(olAppointmentItem)
        With olTermin

	.Inhalte übergeben ...
        .Save
        End With ' |============ Termin neu ============>



     
    Case 1  '|<============ Termin Update ============
        
        Set olTermin = olTermine.Item(1)
        With olTermin

	.Inhalte übergeben ...
        .Save

        End With ' |============ Termin Update ============>
    
    
    
    Case Else
        Debug.Print "Problem!"
scheint bisher zu funktionieren.
Andre.Heisig ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:22 Uhr.


Partner und Co.
Access-Paradies -Alles rund um die Datenbank Microsoft Access -Code -Programme-Tools -Tipps   Kostenlose Tipps & Tricks, Downloads und Programme   www.kulpa-online.com - Tipps - Tricks - Tutorials - Meinungen - Downloads uvm...   vb@rchiv · Willkommen in der Welt der VB Programmierung   Access-Garhammer - Hier finden Sie jede Menge Beispiel-Datenbanken zu Access und mehr ...   mcseboard.de   Die Top Seite für Excel-VBA-Makros uvm.

Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

Copyright ©2000-2018 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günter Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.