Распечатать «отчет» для встречи / встречи с Outlook Macro - PullRequest
0 голосов
/ 07 июля 2010

У меня есть шаблон MS Word, который я использую для печати на бумаге, где я делаю заметки на встречах на работе.Я копирую тему, список участников, время и место, один за другим, и вставляю их в мой текстовый документ.Конечным результатом является страница с заголовком вверху со всей элементарной информацией о собрании.

Я бы хотел автоматизировать эту процедуру.Поэтому, естественно, у меня есть куча вопросов:

  1. Как мне запустить макрос с каким-то указателем / указанием того, какой элемент календаря я бы хотел распечатать?*
  2. После запуска макроса, как программно создать и распечатать отчет для печати?

Пожалуйста, дайте мне несколько фрагментов кода, если можете.Примеры помогают way больше, чем ссылки.

Ответы [ 2 ]

1 голос
/ 08 июля 2010

Я думаю, что лучшее место для начала - это когда у вас открыт соответствующий AppointmentItem. Вот несколько серьезно непроверенных полупсевдокодов, с которых можно начать. Сначала установите ссылку на библиотеку объектов Word (Инструменты - Ссылки).

Sub MakeMeetingTemplate()

    Dim wdApp As Word.Application
    Dim wdDoc As Word.Document
    Dim wdRng As Word.Range
    Dim Appt As AppointmentItem

    If TypeName(ActiveInspector.CurrentItem) = "AppointmentItem" Then
        Set Appt = ActiveInspector.CurrentItem
        Set wdApp = New Word.Application
        wsApp.Visible = True
        Set wdDoc = wdApp.Documents.Add("C:\MyTemplate.doc")

        FillBookMark wdDoc.Bookmarks("MeetingName"), Appt.Subject
        FillBookMark wdDoc.Bookmarks("Attendees"), GetAttendees(Appt)
        FillBookMark wdDoc.Bookmarks("When"), Appt.Start
        FillBookMark wdDoc.Bookmarks("Location"), Appt.Location

    End If
End Sub

Sub FillBookMark(ByRef bMark As Word.Bookmark, sText As String)

    Dim wdRng As Word.Range

    Set wdRng = bMark.Range
    wdRng.Text = sText

End Sub

Function GetAttendees(Appt As AppointmentItem) As String

    Dim Rcpt As Recipient
    Dim sReturn As String

    For Each Rcpt In Appt.Recipients
        sReturn = sReturn & Rcpt.Name & " "
    Next Rcpt

    GetAttendees = sReturn

End Function

Вот что он делает: Убедитесь, что активный элемент является AppointmentItem. Откройте шаблон Word. Заполните предварительно определенные закладки в документе Word данными из AppointmentItem. Когда это будет сделано, у вас будет документ Word с предварительно заполненной информацией, которую вы сможете распечатать, отредактировать или что-то еще. Подробнее о закладках в Word см.

http://www.dailydoseofexcel.com/archives/2004/08/13/automating-word/

0 голосов
/ 26 июля 2010

Для справки, вот последний код, который я использовал:

Sub PrintMeetingheader()

    'Declaration
    Dim myItems, myItem As Object
    Dim myOrt As String
    Dim myOlApp As New Outlook.Application
    Dim myOlExp As Outlook.Explorer
    Dim myOlSel As Outlook.Selection

    Dim sDate As String
    Dim sTopic As String
    Dim sLocation As String
    Dim sAttendees As String

    Dim wdApp As Object
    Dim wdDoc As Object
    Dim wdRng As Object

    'work on selected items
    Set myOlExp = myOlApp.ActiveExplorer
    Set myOlSel = myOlExp.Selection

    'for all items do...
    For Each myItem In myOlSel
        'Check if its the right type
        If TypeName(myItem) = "AppointmentItem" Then
            'Do all sorts of stuff with the item
            sDate = Format(myItem.Start, "mm/dd")
            sDate = sDate + " ("
            sDate = sDate + Format(myItem.Start, "Medium Time")
            sDate = sDate + "-"
            sDate = sDate + Format(myItem.End, "Medium Time")
            sDate = sDate + ")"
            sTopic = myItem.Subject
            sLocation = myItem.Location
            sAttendees = myItem.RequiredAttendees

            Set wdApp = CreateObject("Word.Application")

            Set wdDoc = wdApp.Documents.Open(FileName:="C:\Meeting Notes Temp.doc", ReadOnly:=True)

            FillBookmark wdDoc, sDate, "mDate"
            FillBookmark wdDoc, sTopic, "mTopic"
            FillBookmark wdDoc, sLocation, "mLocation"
            FillBookmark wdDoc, sAttendees, "mAttendees"

            wdDoc.PrintOut True
            MsgBox ("The document was sent to the default printer.  Press OK to close it.")
            wdApp.Quit wdDoNotSaveChanges
        End If
    Next

    'free variables
    Set myItems = Nothing
    Set myItem = Nothing
    Set myOlApp = Nothing
    Set myOlExp = Nothing
    Set myOlSel = Nothing

End Sub
...