All Forums
 Категория Visio
 Форум Вопросы и ответы
 PasteSpecial из Excel в Visio
Author Previous Topic Topic Next Topic  

Surrogate

Russia
122 Posts

Posted - 01/10/2011 :  22:08:26  Visit Surrogate's Homepage
Есть задача - скопировать диапазон значений в Excel в буфер обмена и вставить специальной вставкой в один из шейпов Visio (например с ID = 80)

с выделением диапазона Excel нет проблем

Sub ex()
' выделение и копирование диапазона значений
Dim C1 As Object
Dim W1 As Excel.Workbook
Dim rect As Shape
Dim txt As String
Set C1 = CreateObject("Excel.Application")
Set W1 = C1.Workbooks.Open("b:\VBA\Макросы\test.xls")
Range("A1:B20").Select
    Selection.Copy
W1.Close
Set W1 = Nothing
Set C1 = Nothing
End Sub


а вот со спецвставкой не получается, беда с синтаксисом
Sub shizio()
Dim pg As Page
Dim sel As Selection
Dim rect As Shape
Dim vsoCharacters1 As Visio.Characters
Set pg = ActiveDocument.Pages.Item(1)
Set vsoCharacters1 = Application.ActiveWindow.Page.Shapes.ItemFromID(80).Characters
ex
ActiveWindow.SelectedText = vsoCharacters1
vsoCharacters1.Paste
End Sub


получается только с vsoCharacters1.Paste. метод PasteSpecial не работает: vsoCharacters1.PasteSpecial, vsoCharacters1.PasteSpecial (7) и vsoCharacters1.visPasteOEMText

Люди добрые, подскажите как правильно сделать специальную вставку ?

Surrogate

Russia
122 Posts

Posted - 01/10/2011 :  22:22:03  Visit Surrogate's Homepage
quote:
получается только с vsoCharacters1.Paste. метод PasteSpecial не работает: vsoCharacters1.PasteSpecial, vsoCharacters1.PasteSpecial (7) и vsoCharacters1.visPasteOEMText


Go to Top of Page

GDK

Russia
90 Posts

Posted - 01/11/2011 :  09:19:43
Сервис-макрос-НачатьЗапись - ВытворяешьВсёЧтоНадо - ОстановитьЗапись - ИсследуешьКод - ПоправляешьИлиПишешьНовый и довольный собой идёшь СПАААТЬ.
Go to Top of Page

Surrogate

Russia
122 Posts

Posted - 01/11/2011 :  09:24:51  Visit Surrogate's Homepage
не катит фокус с макрорекордером, спецвставку макрорекордер записывает так:

Application.ActiveWindow.Page.Shapes.ItemFromID(80).Characters.Paste

когда я вставляю этот код в свой макрос, он делает просто вставку

Go to Top of Page

GDK

Russia
90 Posts

Posted - 01/11/2011 :  09:49:40
А в чём разница? Результат какой нужен?
Go to Top of Page

Surrogate

Russia
122 Posts

Posted - 01/11/2011 :  09:56:35  Visit Surrogate's Homepage
я копирую значения из нескольких столбцов Excel`я.
при просто вставке эти значения вставляются в шейп слитно. при специальной вставке значения в столбцах будут разделены Tab`ами

Edited by - Surrogate on 01/11/2011 11:39:35
Go to Top of Page

Surrogate

Russia
122 Posts

Posted - 01/12/2011 :  09:51:46  Visit Surrogate's Homepage
похоже метод PasteSpecial работает только с объектом Page, но не с Shape !
задачу я свою решил криво - сделал PasteSpecial на страницу с созданием нового шейпа:
Application.ActiveWindow.Page.PasteSpecial (7)
текст из нового шейпа загнал в нужный мне шейп и далее удалил вновь созданного шейп

было бы интересно узнать как это можно сделать поэлегантнее ? :)

Go to Top of Page

GDK

Russia
90 Posts

Posted - 01/12/2011 :  15:24:14
Ну да, макрорекордер записывает код, который не даёт нужный результат.

Можно попробовать динамический строковый массив - туда данные из екселя, потом циклом(+ вложенный цыкл) в одну строковую переменную и затем в шейп. Код усложнится несильно. Посмотреть и сравнить быстродействие.
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 01/12/2011 :  15:46:09
quote:
похоже метод PasteSpecial работает только с объектом Page, но не с Shape

Ну да. В справке так и говорится. С шейпом может работать, если шейп является группой.
Путь, предложенный GDK, наверное наиболее оптимальный. Программно разобрать принятые данные и засунуть в шейп в виде строки.
Go to Top of Page
  Previous Topic Topic Next Topic  
Данный сайт является архивом форума visio.artberg.ru, который был закрыт в связи с переходом на новую платформу visio.getbb.ru
Все материалы доступны только для чтения! Если у вас появились вопросы, или вы хотите что-то обсудить, связанное с Visio, обращайтесь на новый форум!
Архив был создан благодаря совместным усилиям Генадия Туманова @Tumanov (visio.artberg.ru), Александра ака @Surrogate (visio.getbb.ru), и Николая Белых @nbelyh (unmanagedvisio.com)