Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.03.2009, 11:16   #1
АлёнаP
Пользователь
 
Регистрация: 17.12.2008
Сообщений: 56
Сообщение Set oDoc = w.Documents.Add

Открыаю документ Word в цикле:
'--------------------------
Set oDoc = w.Documents.Add(fnm & ".dot")
Потом добаляю запись в файле
w.ActiveDocument.FormFields("Цвет") .Result = Color
'------------------------------
Цикл занимает некоторое время и если в этот момент открыть, например, новой сообщение Outlook и начать что-нибудь писать, в создаваемом письме, возникает ошибка: "Запрашиваемый номер семества не существует".
Подскажите, как мне сделать, чтобы цикл выполнялся безошибочно.
АлёнаP вне форума Ответить с цитированием
Старый 27.03.2009, 16:16   #2
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Алёна, если мы присваиваем переменной ссылку на документ, то нужно ею пользоваться, иначе смысла в операции присваивания я не вижу. Вместо того, чтобы писать
Код:
w.ActiveDocument.FormFields("Цвет").Result = Color
Нужно написать
Код:
oDoc.FormFields("Цвет").Result = Color
Тогда вы этот документ не потеряете, тем более, если вы работаете с ним в цикле, то нужно позаботиться, чтобы закрыть его, прежде чем открывать новый.

Добавлено позже
Ваша ошибка появляется, по всей видимости, тогда, когда активным становится документ, который создан не на основе вашего хитрого шаблона, а значит в нем нет такого поля «Цвет», которому вы присваиваете значение Color.
Лучше день потерять — потом за пять минут долететь!©

Последний раз редактировалось viter.alex; 27.03.2009 в 16:30.
viter.alex вне форума Ответить с цитированием
Старый 30.03.2009, 09:17   #3
АлёнаP
Пользователь
 
Регистрация: 17.12.2008
Сообщений: 56
По умолчанию

Цитата:
Сообщение от viter.alex Посмотреть сообщение
Добавлено позже
Ваша ошибка появляется, по всей видимости, тогда, когда активным становится документ, который создан не на основе вашего хитрого шаблона, а значит в нем нет такого поля «Цвет», которому вы присваиваете значение Color.
И, значит, мне от этого не избавиться?
Тогда ни чего не открывать, пока не закончится цикл?

Цитата:
Сообщение от viter.alex Посмотреть сообщение
Тогда вы этот документ не потеряете, тем более, если вы работаете с ним в цикле, то нужно позаботиться, чтобы закрыть его, прежде чем открывать новый.
Конечно я его закрываю.

Последний раз редактировалось АлёнаP; 30.03.2009 в 09:20.
АлёнаP вне форума Ответить с цитированием
Старый 30.03.2009, 10:59   #4
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Цитата:
Сообщение от АлёнаP Посмотреть сообщение
И, значит, мне от этого не избавиться?
Тогда ни чего не открывать, пока не закончится цикл?…
Почему? Обращайтесь к документу не через ActiveDocument, а через переменную, которая на него ссылается. Т.е. вы открываете новый документ, сразу же запоминаете его переменную
Код:
Set oDoc = w.Documents.Add(fnm & ".dot")
и работаете с ним вне зависимости от того, какой документ активен. Закончили работать, закрываете с сохранением изменений:
Код:
oDoc.Close True
Либо сохраняете под нужным именем:
Код:
oDoc.SaveAs "имя файла"
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 30.03.2009, 15:11   #5
АлёнаP
Пользователь
 
Регистрация: 17.12.2008
Сообщений: 56
По умолчанию

Спасибо!!!
Как то хитро получилось! При выполнении этого цикла, я просто теперь не могу открыть новое письмо в Outlook, оно тут же закрывается.
АлёнаP вне форума Ответить с цитированием
Старый 30.03.2009, 15:22   #6
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Казалось бы, причем тут Outlook
Неужели Outlook создает минидокумент для письма?
Зато ошибок нет.
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 30.03.2009, 15:50   #7
АлёнаP
Пользователь
 
Регистрация: 17.12.2008
Сообщений: 56
По умолчанию

Да.... Ошибок нет!

И пока пользователь будет думать в чем дело.....
Цикл уже закончится!!!
И всё же вопрос открыт
АлёнаP вне форума Ответить с цитированием
Старый 30.03.2009, 15:55   #8
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Цитата:
Сообщение от АлёнаP Посмотреть сообщение
…И всё же вопрос открыт
Так в чем вопрос-то?
А что, пользователю обязательно создавать сообщение во время работы макроса? Если обязательно, то сначала нужно его создать, а потом запускать цикл, хотя сама постановка задачи мне непонятна. Как в анекдоте: «Если по голове ударить, на каком ботинке шнурок развяжется»?
Лучше день потерять — потом за пять минут долететь!©

Последний раз редактировалось viter.alex; 30.03.2009 в 15:58.
viter.alex вне форума Ответить с цитированием
Старый 30.03.2009, 16:15   #9
АлёнаP
Пользователь
 
Регистрация: 17.12.2008
Сообщений: 56
По умолчанию

Цитата:
Сообщение от viter.alex Посмотреть сообщение
А что, пользователю обязательно создавать сообщение во время работы макроса?
И у меня был тот же вопрос к ним
некоторые поддались, не открывать Outlook, а некоторые "вредные" с одной репликой, что должно РАБОТАТЬ!!!
АлёнаP вне форума Ответить с цитированием
Старый 30.03.2009, 16:21   #10
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Тогда можно попробовать запустить работу с нашими документами в другом процессе Word и вообще его не показывать, а все делать «строго по закону, то бишь … втихаря». Тогда Outlook, может быть, будет брать открытый процесс Word, а тот, который мы запустили из-под макроса, ему не должен быть виден. Хотя, от мелкомягких всего можно ожидать.
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при использовании OlePropertyGet("Documents").OleProcedure("Add") в C++ Builder AleksP C++ Builder 7 11.04.2009 13:06
2 задачки (String & Set ) mshunter Паскаль, Turbo Pascal, PascalABC.NET 7 08.01.2009 21:13
Макрос set attribute file oTyler Microsoft Office Excel 3 08.07.2008 13:20
ошибка CommandText does not return a result set furstenberg БД в Delphi 2 04.02.2008 17:38
Протокол защищенных электронных транзакций Set Nathan Помощь студентам 3 27.01.2007 16:08