Excel это не сложно
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
25.04.2024, 09:08:11

Войти
На форуме добавлена возможность подписки на RSS-ленты любого раздела форума. Подписаться можно, нажав на иконку RSS , расположенную левее наименования раздела.
33 243 Сообщений в 5 458 Тем от 6 763 Пользователей
Последний пользователь: tetrapack
*
Перейти на сайт Хитрости Надстройка MulTEx Обучающие тренинги Наша группа ВКонтакте
Правила форума Начало Помощь Поиск Календарь Войти Регистрация Выйти
  Просмотр сообщений
Страниц: [1]
1  Основные форумы / Вопросы по Excel и VBA / VBA: Библиотека/класс для работы с окнами - ищу : 10.08.2017, 15:07:22
Добрый день!

Подскажите, плиз!

Столкнулся с работой с окнами в Windows.
Изучаю WindowsAPI: FindWindow, GetWindowText, EnumChildWindows и т.п. Процесс идет, но долго.

Подумал, наверняка ведь есть уже готовое какое-нибудь решение - какая-нибудь библиотека, которую нужно подключить, и оперировать окнами как объектами? И не изучать каждую функцию в отдельности.
Официальная или самодельная... Ведь сделать окно как объект явно напрашивается!

Кто знает, подскажите, пожалуйста! Библиотек на компе сотни и как найти нужную - не понятно Грустный
По понятным причинам поиск "vba библиотека для работы с окнами" и а-ля выдает тонны ненужного...

2  Основные форумы / Вопросы по Outlook и VBA / Re:Как открыть сообщение для редактирования через объектную модель Word? : 13.02.2017, 14:25:27
Нет, я имею ввиду подключиться к Outlook и из него сделать правку. Как Вы руками правите? Можете прямо по шагам описать процесс? Может я чего не так понимаю просто. После того как опишите - можно будет уже более конкретное что-то посоветовать или предложить.
Я пишу макрос в Аутлуке. Из Аутлука выбираю MailItem (подробности опущу). У него беру инспектора (через MailItem.GetInspector), у которого получаю объектную модель Word данного письма (через Inspector.WordEditor). Которая закрыта для редактирования (прочитать всё могу - написать нет). Вопрос в том, как ее "разлочить" для редактирования.
Встречал много примеров, где она просто применяется без разлочивания - но это работает для новых писем, только что созданных. Создал новый MailItem - вот у тебя разлоченный Inspector.WordEditor. Сразу можно редактировать. А мне надо заменять в старых письмах (уже отосланных или уже полученных). Они так просто не редактируются (выдает ошибку, описанную в первом посте).

Конкретно по шагам что надо сделать руками для получения нужного результата на примере одного письма:
1. Открыть письмо (окно сообщения aka Inspector).
2. Выбрать "Изменить сообщение" (через Ленту: Сообщение - Действия - Изменить сообщение).
3. Нажать Ctrl+H - открывается окно замены (либо мышкой через Ленту: Сообщение - Найти - Заменить)
4. Ввести Строку1, Строку2 (заменяемое, заменяющее).
5. Нажать "Заменить все"
6. Нажать "Закрыть" в окне "Найти и заменить"
7. Нажать "Закрыть" в окне сообщения.

Впрочем, решение (через Commandbars, т.е. симуляцию нажатия кнопки Ленты) я уже нашел. В принципе, в последнее время я именно про такое решение думал.
Лучше будет только если есть какое-то решение через именно свойства и методы "натуральных" объектов (типа Inspector, MailItem, Application и т.п.).
3  Основные форумы / Вопросы по Outlook и VBA / Re:Как открыть сообщение для редактирования через объектную модель Word? : 13.02.2017, 13:56:00
Пока не нашел то, что нужно, прям в самих объектах.
Но нашел, как через объекты симулировать нажатие "Изменить сообщение" без SendKeys:
Код: (vb)
Insp.CommandBars.ExecuteMso ("EditMessage")

Ну и что-то типа такого при имеющемся MailItem:
Код: (vb)
Dim Insp As Inspector, MI As MailItem
Set Insp = MI.GetInspector
Insp.Activate: DoEvents
Insp.CommandBars.ExecuteMso ("EditMessage"): DoEvents

(DoEvents, возможно, не нужно)
4  Основные форумы / Вопросы по Outlook и VBA / Re:Как открыть сообщение для редактирования через объектную модель Word? : 12.02.2017, 04:16:04
Так а почему не подключаетесь к Outlook и там не правите? Ведь это проще, чем менять через Word. Примеры работы в Outlook есть на сайте в разделе Хитрости.
Дело в том, что вообще мне надо делать замену Строки1 на Строку2.
Если Вы имеете в виду через HTMLBody, то задача замены там в моем случае сложна. Все письма какие-то разные, разные форматы, разные кодировки. Тэги в разных местах понатыканы....
Даже письма, копипастенные с одного вордовского шаблона, отличаются почему-то.
5  Основные форумы / Вопросы по Outlook и VBA / Re:Как открыть сообщение для редактирования через объектную модель Word? : 11.02.2017, 12:57:14
Сам пока нашел 2 решения, но оба не достаточно хороши.
 - wdDoc.Unprotect
Оказывается, работает на части писем. Больше половины, но не на всех.
К тому же, при попытке сделать wdRange.Find.Execute Outlook "падает" (не на каждом письме, но быстро Улыбка)
И эта команда делает всё же не то, что делает кнопка. Сообщение на редактирование открывается, но вордовские вкладки над лентой не появляются.
 - открыть Inspector и сделать SendKeys
Код: (vb)
Application.ActiveInspector.Activate
SendKeys "%TCC", True - делает симуляцию нажатия кнопки "Изменить сообщение"

Делает то, что нужно. Но делает это долго (на каждое письмо от секунды до нескольких), и может не всегда срабатывать.

Хотелось бы всё же как-то делать через объектную модель (скорее всего объекты Outlook, но может быть и Word), но уже всю голову сломал, КАК.
Подскажите, плиз!
6  Основные форумы / Вопросы по Outlook и VBA / Как открыть сообщение для редактирования через объектную модель Word? : 11.02.2017, 12:47:45
Добрый день!

Подскажите, плиз, как открыть сообщение (MailItem) для редактирования через объектную модель Word (через свойство Inspector.WordEditor)?
(сообщение не новое - а старое, полученное или уже отосланное)
Outlook 2010.

Руками это делается в окне чтения сообщения в ленте через Сообщение - (Переместить) - Действия - Изменить сообщение. А как это сделать программно?

В приведенном ниже коде попытка wdRange.InsertAfter - приводит к ошибке "Run-time error '4605': Метод или свойство недоступны, поскольку документ заблокирован для редактирования."
Посмотрел, в wdDoc.ProtectionType стоит "wdAllowOnlyReading". А если вручную открыть на редактирование - то "wdNoProtection".
Но попытка сделать wdDoc.Unprotect приводит к ошибке "Run-time error '4605': Данная команда недоступна."

В свойствах MailItem или Inspector ничего подходящего не вижу.
Если сделать "Изменить сообщение" руками - то приведенный код работает.

Подскажите, плиз!

Код: (vb)

Private Sub test1()
    Dim Msg As MailItem, AI As Inspector, wdDoc As Word.Document, wdRange As Word.Range
    Set AI = ActiveInspector
    Set Msg = AI.CurrentItem
    Set wdDoc = AI.WordEditor
    Set wdRange = sDoc.Range(0, 0)
    wdRange.InsertAfter "[Вставленный текст]"
End Sub
Страниц: [1]
Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Яндекс.Метрика Рейтинг@Mail.ru