Как скопировать чертеж со страницы Visio в документ Word

#vba #ms-word #visio

#vba #ms-word #визио

Вопрос:

Я создаю инструмент в Visio для рисования электронных дизайнов. Когда закончите, проекты тезисов должны быть скопированы в документ Word для дальнейшего написания и описания проектов. Я борюсь с кодом VBA в Visio, чтобы скопировать страницу Visio в документ word. Желательно, чтобы я открыл существующий шаблон word и скопировал дизайн Visio после заданного заголовка Word или около того, но пока мне удалось создать только новый пустой документ Word, но я не могу найти способ ссылаться на документ word.
Может ли кто-нибудь помочь мне с тем, как вставить выбранную диаграмму в приложение Word, пожалуйста? Это код Visio, с которым я борюсь:

 Public Sub CopyVsoPgToWord()
   Dim objWord
   Dim objDoc
   Dim vsoPage As Visio.Page
   Dim DocName As String
   
   Set objWord = CreateObject("Word.Application")
   objWord.Visible = True
   Set objDoc = objWord.Documents.Add

   ActiveWindow.SelectAll
   Application.ActiveWindow.Selection.Copy
   With objDoc
      .Paste  'this doesnt work
      'past the Visio diagram into word page 2
   End With
 

Конец Подводной лодки

Ответ №1:

Метод Paste появляется в нескольких классах, таких как Range , поэтому вам просто нужно найти один из них. Свойство содержимого Document даст вам Range , но вы можете изменить это в зависимости от того, куда вы хотите вставить объект.

Возможно, вам также будет проще добавить ссылку на объектную модель Word (через Tools / References / Microsoft Word).

В любом случае, попробуйте это:

    Dim wdApp As Word.Application
   Dim wdDoc As Word.Document
   
   Set wdApp = CreateObject("Word.Application")
   wdApp.Visible = True
   Set wdDoc = wdApp.Documents.Add("C:Program Files (x86)Microsoft OfficerootTemplates1033OriginReport.Dotx")

   Dim vApp As Visio.Application
   Dim vSel As Visio.Selection
   
   Set vApp = Visio.Application
   
   Set vSel = vApp.ActivePage.CreateSelection(visSelTypeAll, Visio.VisSelectMode.visSelModeSkipSuper)
   vSel.Copy
   
   wdDoc.Content.Paste
 

(Здесь также будет работать выделение из окна)

Комментарии:

1. Джон, спасибо за ответ на мой вопрос. Извините, но я получаю ошибку компиляции в инструкции Me.Application. Что мне нужно сделать, чтобы решить эту проблему?

2. Это примечание о том, что оно находится в этом документе. Если вы просто работаете в обычном модуле, вы можете избавиться от «Я». и, на самом деле, вы можете избавиться от него в любом случае, поскольку для Visio это глобальное свойство по умолчанию. Я думаю, что каждый раз, когда вы имеете дело с несколькими объектными моделями (в данном случае Visio и Word), стоит попытаться быть явным, поэтому, вероятно, эта строка может быть лучше: Set vApp = Visio.Application