СообЧа > База Знаний > Программы > MS Excel

Вопрос

Результатом работы макроса является присвоение переменной значения, которое может оказаться довольно объемным текстом.

Можно ли этот текст автоматически экспортировать в word, другой текстовый редактор или хотя бы копировать в буфер обмена?

Ответ

Можно.

Начнем с последнего. Скопировать текстовую переменную VText в буфер обмена:

Set Fl = New DataObject
Fl.SetText Text:=VText
Fl.PutInClipboard

Эти три команды: создать новый объект, присвоить объекту значение переменной и переместить объект в буфер обмена.
С буфером обмена можно делать все, что угодно: например, вставить его в новый документ Excel и сохранить этот документ в нужном (например, в текстовом) формате. Но можно вставить буфер обмена и непосредственно в документ нужного текстовый редактора.

Чтобы вызвать редактор (допустим Word) нужно воспользоваться командой Shell:

Shell("C:\Program Files\Microsoft Office\Office\winword.exe", vbNormalFocus)

Чтобы вставить в документ редактора содержимое буфера обмена можно активизировать редактор и сделать вставку:

AppActivate "Microsoft Word", 1
SendKeys "+{INSERT}", 1

PS: Иногда подобные операции в «другой» программе требует небольшого времени ожидания на загрузку окна и т.д. Для задержки выполнения кода я использую небольшую процедуру:

Public Sub Idle(n As Single) Dim t As Single t = (Timer) If n < 0 Then MsgBox "OK?" Else While t + n > Timer Wend End If End Sub

Вызов этой процедуры задерживает выполнение кода макроса на указанное аргументом количество секунд или останавливает до нажатия на клавишу Ввода, если аргумент отрицательный.

Из конференции Expert_FAQ

Намного правильнее просто создать объект Word:
dim oWord as object
set oWord = CreateObject("word.application")
и сделать с ним все что нужно.

dimzon



Copyright © 2000-2004 Сообщество Чайников
Контактная информация