mray Geschrieben 2. März 2009 Geschrieben 2. März 2009 Hi Leute, ich soll irgendwie ein Outlook Kontakt durch anklicken in einem Word Dokument öffnen. Da ich leider absolut keine Ahnung von dem Zeugs hab und es eigentlich auch nicht mein Bereich ist, häng ich gerade ein bißchen durch. Das ganze soll als Makro in Outlook laufen. Ich hab in VS2005 ein bißchen experimentiert, das öffnen klappt, nur der Zugriff auf die Outlook Kontakte klappt nicht. Allerdings klappt das leider nicht unter Outlook. Kann mir jemand bitte weiterhelfen? Vielen Dank im voraus! ___________________________________________ Imports Word = Microsoft.Office.Interop.Word Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click Dim oWord As Word.Application 'Variablendeklaration als Word appl. Dim oDoc As Word.Document 'Variablendeklaration als Word appl. Dim oPara1 As Word.Paragraph, oPara2 As Word.Paragraph 'Erzeugt einen Absatz Dim oPara3 As Word.Paragraph '**************************************************************** 'Je Nach Wunsch muss eins auskommentiert werden. 'Im Moment wird ein neues Word Dokument und eine Vorlage geöffnet 'erwünscht ist meines Wissens nach nur ein neues Dokument '**************************************************************** 'Start Word and open the document template. New Word oWord = CreateObject("Word.Application") 'erzeugt ein neues Word Object oWord.Visible = True 'Das Word Dokument wird beim öffnen angezeigt oDoc = oWord.Documents.Add 'kürzt den Befehl oWord.Documents.Add in oDoc ab 'Insert a paragraph at the beginning of the document. oPara1 = oDoc.Content.Paragraphs.Add 'gibt die Pos. des Absatzes ein oPara1.Range.Text = "Text 1" 'Befehl für Texterzeugung oPara1.Range.Font.Bold = True 'Befehl für Fettschrift oPara1.Format.SpaceAfter = 24 '24 leerzeichen nach Absatz. oPara1.Range.InsertParagraphAfter() ''Insert a paragraph at the end of the document. ''** \endofdoc is a predefined bookmark. oPara2 = oDoc.Content.Paragraphs.Add(oDoc.Bookmarks.Item("\endofdoc").Range) 'Pos. ist am Dokumentenende oPara2.Range.Text = "Text 2" oPara2.Format.SpaceAfter = 6 oPara2.Range.InsertParagraphAfter() ''Uses a Template to open Word. Old Word oWord.Documents.Add("C:\Vorlagen\dok.dotx") 'gibt den Ort der zu öffnenden Dateivorlage an oDoc.Bookmarks.Item("test").Range.Text = "Nur zu testzwecke" 'fügt der Textmarke namens "test" einen Text hinzu 'Insert another paragraph. oPara3 = oDoc.Content.Paragraphs.Add(oDoc.Bookmarks.Item("\endofdoc").Range) oPara3.Range.Text = "This is a sentence of normal text. Now here is a table:" oPara3.Range.Font.Bold = False oPara3.Format.SpaceAfter = 24 oPara3.Range.InsertParagraphAfter() Me.Close() End Sub End Class ____________________________________________________________ Das hier ist unter Outlook geschrieben, da klappt aber nichts... =( Die Kommentare kann man getrost Ignorieren. Sie dienen bei mir als Hilfe damit ich weiß um was es geht... ____________________________________________________________ Option Explicit Dim objoutlook As Outlook.Application 'Outlook als Objekt festlegen Dim objnamespace As NameSpace 'aktuellen Arbeitsbereich von Outlook mit dem Namespace festlegen Dim objmapifolder As MAPIFolder 'Der Mapi-Folder legt den Kontaktordner fest Dim objitems As Items 'Items sind die einzelnen Kontakeinträge Dim aktuser As String 'Speicherung des Usernames Private Sub CommandButton1_Click() Kontakte_Lesen 'Kontakte auslesen und anzeigen Kontakte_in_Word 'Kontakte in Word kopieren End Sub Function Kontakte_Lesen() Set objoutlook = New Outlook.Application 'Outlook initialisieren Set objnamespace = objoutlook.GetNamespace("MAPI") 'Namespace initialisieren aktuser = objnamespace.CurrentUser 'Aktuellen User im Outlook ermitteln Set objmapifolder = objnamespace.GetDefaultFolder(olFolderContacts) 'Kontakt Ordner setzen Set objitems = objmapifolder.Items 'Items initialieren Kontakte_Lesen -objitems.LastName & ", " & objitems.FirstName End Function Private Sub Kontakte_in_Word() Dim oword As Word.Application Dim odoc As Word.Document Dim opara1 As Word.Paragraph öword = CreateObject("Word.Application") 'neues Word Dokument erstellen oword = Visible = True 'beim öffnen angezeigt lassen odoc = oword.documents.Add End Sub Zitieren
tester2k5 Geschrieben 2. März 2009 Geschrieben 2. März 2009 Was ist denn der Zweck des ganzen? Wo soll der Outlook Kontakt den angeklickt werden? Wo soll das Macro Laufen? In Outlook (permanen) oder in einer Word-Datei? Willst du den Kontakt dann für einen Brief übernehmen oder als vCard einfügen...? Gruss, tester2k5 Zitieren
mray Geschrieben 2. März 2009 Autor Geschrieben 2. März 2009 Hi, erst einmal Danke für die schnelle Antwort Den Zweck kenne ich nicht. Ist wahrscheinlich eine ABM von meinem Chef... Das Makro soll ständig in Outlook laufen. Es soll entweder mit Rechtsklick oder mit einem Button angeklickt werden (ich hatte Button im Auge). Der Kontakt soll für einen Brief übernommen werden, nicht als vCard. Gruß Mray Zitieren
tester2k5 Geschrieben 3. März 2009 Geschrieben 3. März 2009 Word bietet bereits eine Möglichkeit Adressen aus Outlook zu übernehmen, ich hab momentan nur eine Englische version da: 1. In Word mit "Rechts-Klick" auf "Customize..." unter "Commands" / "All Commands" den Button "InsertAddress" auf eine Befehlsleiste ziehen. 2. Mit dem Befehl "InsertAddress" können dann Kontakte aus dem Adressbuch per Mausklick eingefügt werden. Gruss, tester2k5 Zitieren
mray Geschrieben 3. März 2009 Autor Geschrieben 3. März 2009 Hi, das kenn ich schon Das ganze soll wie schon erwähnt aus dem Outlook aus gestartet werden. Makro läuft unter Outlook ab. Word soll erst geöffnet werden, wenn auf den entsprechenden Button geklickt wird "Word.Application" soll gestartet werden. Ich seh schon, hier komm ich auch nicht weiter. Den Sinn wieso weshalb warum verstehe ich übrigens auch nicht. Ich soll es machen. Also versuche ich es weiter. Danke trotzdem Zitieren
tester2k5 Geschrieben 3. März 2009 Geschrieben 3. März 2009 Du solltest nicht so schnell aufgeben. Das währe nur der einfachste weg gewesen. Eine Möglichkeit über VBA währe das Kontextmenü: Option Explicit ' Create a context menu for single Outlook contacts ' Insert this code in Outlook "ThisOutlookSession", close and re-open Outlook Dim WithEvents objContact As Outlook.ContactItem Dim WithEvents objExplorer As Outlook.Explorer Private blnIsContactFolder As Boolean Private Sub Application_Startup() Set objExplorer = Application.ActiveExplorer End Sub Private Sub objExplorer_Close() If Application.Explorers.Count > 0 Then Set objExplorer = Application.ActiveExplorer Else Set objExplorer = Nothing Set objContact = Nothing End If End Sub Private Sub objExplorer_FolderSwitch() Dim objFolder As Outlook.MAPIFolder Set objFolder = objExplorer.CurrentFolder If objFolder.DefaultItemType = olContactItem Then blnIsContactFolder = True Else blnIsContactFolder = False End If Set objFolder = Nothing End Sub Private Sub objExplorer_SelectionChange() Dim objItem As Object Dim objAction As Outlook.Action If objExplorer.Selection.Count > 0 Then Set objItem = objExplorer.Selection(1) If objItem.Class = olContact Then Set objContact = objItem Set objAction = objContact.Actions("My Action") If objAction Is Nothing Then Set objAction = objContact.Actions.Add With objAction .Enabled = True .Name = "My Action" .ShowOn = olMenu End With objContact.Save End If End If End If Set objItem = Nothing Set objAction = Nothing End Sub Private Sub objContact_CustomAction(ByVal Action As Object, _ ByVal Response As Object, _ Cancel As Boolean) 'MsgBox ("Contact: " & objContact) Dim objWord: Set objWord = CreateObject("Word.Application") Dim objDoc: Set objDoc = objWord.Documents.Add("C:\Test.doc") objWord.Selection.TypeText Text:=(objContact & vbCrLf & _ objContact.JobTitle & vbCrLf & _ objContact.CompanyName & vbCrLf & _ objContact.BusinessAddress & vbCrLf & _ "Tel.: " & objContact.BusinessTelephoneNumber & vbCrLf & _ "Fax: " & objContact.BusinessFaxNumber & vbCrLf) objWord.Visible = True Cancel = True End Sub Getestet unter Outlook 2003. Wobei du damit zwar die Daten in Word eingefügt hast, aber noch nicht formatiert oder bei einer Vorlage positoniert hast. Gruss, tester2k5 Zitieren
mray Geschrieben 5. März 2009 Autor Geschrieben 5. März 2009 Hi tester2k5, danke für den Code. Ich hatte heute etwas die Gelegenheit es zu testen. Unter Outlook 2007 funktioniert es leider nicht - vielleicht habe ich auch etwas falsch gemacht. Ich poste mal den Fehler als Screen im Anhang. Er bleibt hier hängen: Dim objDoc: Set objDoc = objWord.Documents.Add("C:\Test.doc") Wenn ich diese Zeile auskommentiere sind alle folgenden auch falsch ... Legt er mir da ein neues Dokument namens Test.doc an? Was habe ich alles gemacht: Den Code in ThisOutlookSession eingefügt, Outlook geschlossen und neu aufgemacht. Makros Aktiviert. Rechtsklick auf Kontakt und auf My Action geklickt. Viele Grüße MRay Zitieren
tester2k5 Geschrieben 5. März 2009 Geschrieben 5. März 2009 Der Teil erstellt ein Word Object und öffnet ein Dokument ("C:\Test.doc"), quasi die Brief-Vorlage. Dim objWord: Set objWord = CreateObject("Word.Application") Dim objDoc: Set objDoc = objWord.Documents.Add("C:\Test.doc") Im Anschluss werden die Kontaktdaten an den Anfang des Dokuments eingefügt. Der Code sollte dir aber bekannt sein, du hast ihn ja auch verwendet: oWord.Documents.Add("C:\Vorlagen\dok.dotx") 'gibt den Ort der zu öffnenden Dateivorlage an Gruss, tester2k5 Zitieren
mray Geschrieben 5. März 2009 Autor Geschrieben 5. März 2009 Stimmt, du hast Recht :upps Ich habe es verwendet, kann es aber nicht (deswegen hatte ich alles auskommentiert, ist aber nicht hängen geblieben...) Ich hatte auch alles angepasst, sprich Datei, Speicherort etc. aber ich hab eben den Laufzeitfehler bekommen. Ich teste das ganze mal morgen unter 2003. Da es bei dir ging, gehe ich davon aus dass es bei mir auch gehen wird. Mal schauen ob ich es danach unter 2007 zum laufen bringe. Ich melde mich wieder mit dem Ergebnis Zitieren
Amstelchen Geschrieben 6. März 2009 Geschrieben 6. März 2009 falls du auf dem system, auf dem das laufen soll, sowohl office 2003 als auch office 2007 installiert hast, wirds eine herausforderung bzw. nervensache. die info, ob dem so ist, wäre wertvoll dann ist auch die von dir abfotografierte fehlermeldung schlüssig, denn dann instantiierst du word 2003 mit einem dateinamen .dotx oder .docx, welche office 2003 ohne hotfix nicht erkennt. s'Amstel Zitieren
mray Geschrieben 6. März 2009 Autor Geschrieben 6. März 2009 Ich benutze Office 2007. Ich hab mir noch einen Testrechner mit 2003 hergerichtet. @Tester: es funktioniert bei beiden Versionen Ich hatte die Word Datei zuerst als .docx gespeichert. Vielen Dank für deine Hilfe. Fand ich echt stark. Gruß Mray Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.