Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

Geschrieben

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

Geschrieben

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

Geschrieben

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

Geschrieben

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

Geschrieben

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

Geschrieben

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

post-59043-14430448257668_thumb.jpg

Geschrieben

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: :rolleyes:

oWord.Documents.Add("C:\Vorlagen\dok.dotx") 'gibt den Ort der zu öffnenden Dateivorlage an

Gruss,

tester2k5

Geschrieben

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 :)

Geschrieben

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

Geschrieben

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

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...