У меня есть шаблон MS Word, который я использую для распечатки бумаги, где я делаю заметки на собраниях на работе. Я копирую тему, список участников, время и место, один за другим и вставляю их в свой документ Word. Конечным результатом является страница с заголовком вверху со всей элементарной информацией о встрече.
Я хотел бы автоматизировать эту процедуру. Поэтому, естественно, у меня есть куча вопросов:
- Как мне запустить макрос с каким-то указателем/индикатором того, какой элемент календаря я хочу распечатать?
- После запуска макроса, как мне программно сделать отчет для печати и распечатать его?
Пожалуйста, дайте мне несколько фрагментов кода, если можете. Примеры помогают намного больше, чем ссылки.
Ответ 1 · рейтинг 1 · Dick Kusleika
Я думаю, что лучше всего начать, когда у вас открыт соответствующий элемент 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/
Ответ 2 · Adam S
Для справки, вот окончательный код, который я использовал:
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