Имитация недопустимой ошибки в Word на событие.

Программирование на Visual Basic for Applications
Asis
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 24.05.2004 (Пн) 18:16

Имитация недопустимой ошибки в Word на событие.

Сообщение Asis » 24.05.2004 (Пн) 18:58

Помогите, плиз. Нам необходимо провести эксперимент по психологии агрессии. Для этого необходимо сымитировать сбой в работе Word на сотое нажатие клавиши <пробел>.

Предположим, есть Word'овский документ (Word 97), например avtoportret.doc
Необходимо присоединить к нему макрос, который:
1) Начиная с открытия этого файла, по ходу набора в нем некоторого текста считает количество нажатий на клавишу <пробел> (сами пробелы, естественно, в тексте появляются);
2) При достижении некоторого количества нажатий пробелов, допустим 100, макрос, имитируя сбой в Word, выдает диалоговое окно с сообщением "Программа выполнила недопустимую операцию, и будет закрыта" и кнопками <закрыть> (активная) и <сведения> (неактивная), с появлением этого диалогового окна работать в документе, набирать текст уже нельзя;
3) При нажатии на кнопку <закрыть> Word закрывается, а результаты всей работы в документе не сохраняются (желательно, но не обязательно, чтобы набранный текст сохранялся в др. файле, например, avtoportret.rtf).

Огромная просьба, помогите кто может, напишите текст макроса полностью, так как я в макросах и VBA совсем не разбираюсь.

Заранее благодарю, Алексей!

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 25.05.2004 (Вт) 9:03

Считать нажатия клавиш наверное не получится. Правда можно считать количество пробелов в тексте (проводить пересчет раз в полминуты).
Кроме того, лучше не использовать фиксированное число, лучше 100 +/- 20.
Остальное проблемы не представляет (нарисовать диалоговое окно, выход без запроса). Единственное - сохранение в другой файл. Такое сохранение может быть довольно длительным и любой может заподозрить, что что-то тут нечисто (если после аварийного завершения Word закроется не сразу, а через минуту, при этом в строке статуса будет текст "Идет сохранение")
Lasciate ogni speranza, voi ch'entrate.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 25.05.2004 (Вт) 9:05

Выход: сохранять непосредственно до вывода окна диалога, взяв при этом ручной контроль над application.statusbar...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 25.05.2004 (Вт) 9:31

Народ, скиньте мне скриншот окна "недопустимой ошибки" :)
А то я уже и не помню, как оно выглядит ;)
Lasciate ogni speranza, voi ch'entrate.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 25.05.2004 (Вт) 9:36

Да ты счастливый человек! :)
Kernel32.dll :arrow: DIALOG :arrow: #1 :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 25.05.2004 (Вт) 11:48

Предлагаю заценить :)
http://alibek09.narod.ru/vb/autoportret.zip

Все настройки в модуле AutoPortretCommon

З.Ы. Естественно, в документе есть макросы, и естественно, их необходимо разрешить. В модуле используется SetTimer, поэтому неотловленный выход из Word чреват не имитируемым, а реальным падением ;)

З.З.Ы. [EDIT] Программа реагирует на пробелы (100 +/- 20), кол-во символов (500 +/- 50) и время (5 минуты +/- 30 секунд) от начала ввода. Триггеры соединены по OR, если столь ранее "падение" (через пять минут) не устраивает, можно подредактировать значения либо код.
Lasciate ogni speranza, voi ch'entrate.

Asis
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 24.05.2004 (Пн) 18:16

Сообщение Asis » 26.05.2004 (Ср) 3:40

GSerg и, особенно, alibek, огромное вам спасибо за участие!

Теперь по сути.

alibek, ваш файл при открытии в моем Word 97 сразу открывает VBA-редактор, выдает сообщение "Ошибка компиляции: Ошибка синтаксиса", и выделяет строчку "If hTimer = 0 Then hTimer = SetTimer(0&, 0&, 30000&, AddressOf TimerProc)".
Что сие значит?

Кстати, если есть подобная ошибка, то макрос все же будет работать или нет?

С нетерпением жду ответа...
...Алексей...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 26.05.2004 (Ср) 8:15

Ээээ, alibek, хитрый какой :)
А вот не работает AddressOf в Office97. Так что предлагаю направить стопы свои в направлении application.ontime
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 26.05.2004 (Ср) 8:54

Блин, ну почему не реализован AddressOf? :) Хотя понятно, там же еще VB5.
Переделал, скачай заново.
Lasciate ogni speranza, voi ch'entrate.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 26.05.2004 (Ср) 10:42

alibek, тебе о чём-нибудь говорят слова "momory" и "debig"? :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 26.05.2004 (Ср) 11:18

Э... А... Кто здесь??? :)
Ничего не знаю, какие momory и debig? :) Не знаю таких слов :)
Lasciate ogni speranza, voi ch'entrate.

Asis
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 24.05.2004 (Пн) 18:16

Сообщение Asis » 27.05.2004 (Чт) 13:39

alibek, твое произведение опять ругается :(((

Файл открывается без проблем, но через некоторое время выдает ошибку компиляции: переменная не определена. При нажатии <Ok> говорит, что Невозможно выполнение программы в режиме прерывания. При этом выделяется vbModal в строке ufErrorMessage.Show vbModal (7-ая от конца макроса). И еще попутно ищет файл справки VEruLR3.HLP, которого у меня нет.

А я-то уже слюнки сглатывал :(((

Надеюсь на вашу помощь!

С уважением, Алексей!

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 27.05.2004 (Чт) 13:46

Попробуй вместо ufErrorMessage.Show vbModal написать ufErrorMessage.Show
Lasciate ogni speranza, voi ch'entrate.

Asis
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 24.05.2004 (Пн) 18:16

Сообщение Asis » 27.05.2004 (Чт) 16:22

Написал.

Теперь выделяет первый Replace в Public Function ErrorMessageBody() As String :((( и опять сообщает, что "Невозможно выполнение программы в режиме прерывания".

Что теперь?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 27.05.2004 (Чт) 16:38

Ох, мать моя женщина... :)
Тогда добавь к модулю такую функцию:
Код: Выделить всё
Function Replace(ByVal sExpression As String, ByVal sFind As String, ByVal sReplace As String) As String
Dim P As Long
P = 1
Do
  P = InStr(P, sExpression, sFind)
  If P = 0 Then Exit Do
  sExpression = Left$(sExpression, P-1) & sReplace & Mid$(sExpression, P+Len(sFind))
  P = P + Len(sReplace)
Loop
Replace = sExpression
End Function


Эта функция не отличается особой производительностью, лучше поищи по форуму темы с ключевым словом Replace и за авторством skiperski, от там что-то шаманил и оптимизировал, добившись производительности, не уступающей встроенной Replace().
Lasciate ogni speranza, voi ch'entrate.

Asis
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 24.05.2004 (Пн) 18:16

Сообщение Asis » 27.05.2004 (Чт) 17:08

alibek, ты действительно Большой Человек!
Огромное тебе спасибо!

Как проведем эксперимент, вывешу здесь его рез-ты.

С огромным уважением, Алексей!


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 133

    TopList  
cron