Удивительно, но факт!

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

vvb
Сообщения: 36
Зарегистрирован: 21 окт 2006, 22:32
Откуда: Пенза
Контактная информация:

Файл Excel запускается с использованием Private Sub Workbook_Open(). Если ничего не трогать, а сразу вводить текст в ту ячейку, которая оказалась активной, то ввод происходит не в ячейку, а перед заголовком "Private Sub Workbook_Open()".
Например, получится так: "вввввPrivate Sub Workbook_Open()".
Сначала ничего не видно. Перещелкнул ячейки, ввел, что надо, и продолжаешь работать. Но при сохранении файла выдаётся ошибка компиляции. Вот тут-то и видно, куда на самом деле шел первый ввод.
Получается, что пользователь может вызвать ошибку компиляции. Хорошо, что пишется не внутри процедуры, а рядом. А то, такое можно было бы написать!
Сталкивался ли кто с подобным явлением?
Попытка принудительной активизации ячеек не проходит.
При установке защиты кода проекта ситуация не проявляется.
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

vvb, интересно. А что прописано в Private Sub Workbook_Open() ?
У меня происходило нечто подобное, при отладке по F8, пользовательских форм. Там где присутствует событие Change.
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
vvb
Сообщения: 36
Зарегистрирован: 21 окт 2006, 22:32
Откуда: Пенза
Контактная информация:

Прописано:
- отключение линеек прокрутки, ярлычков листов, строки состояния, панелей инструментов,
- создание своего меню с использованием ID-кодов
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

Да, собственно, ничего особенного...
Так откуда же оно лезет?
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
vvb
Сообщения: 36
Зарегистрирован: 21 окт 2006, 22:32
Откуда: Пенза
Контактная информация:

Да, там ещё есть такая особенность. При запуске скрываются почти все строки и большая часть столбцов.
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

Тогда пробуйте искать "косяк" в
- отключение линеек прокрутки, ярлычков листов, строки состояния, панелей инструментов,
- создание своего меню с использованием ID-кодов
пройдитесь по коду F8, мож чё покажет...
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
vvb
Сообщения: 36
Зарегистрирован: 21 окт 2006, 22:32
Откуда: Пенза
Контактная информация:

Похоже, здесь нужно придумать нечто другое, нежели F8.
Сразу после заголовка Private Sub Workbook_Open() поставил Stop.
Пошагово все отрабатывается без проблем. Суть в том, что пошагово исполняется код находящийся внутри тела процедуры, а в рассматриваемом случае происходит ввод символов перед названием процедуры.
Также, если пошагово, то не удается полностью воспроизвести ситуацию. После завершения работы процедуры активным остается окно с кодом. Чтобы начать ввод в рабочий лист требуется щелчок. Это уже другая ситуация, то есть, нормальная.

Помнится, сталкивался с ограничениями по количеству скрытых столбцов. Не здесь ли поискать?
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

Судя по всему фокус у вас не в том окне.
Выложите файл - посмотрим.
vvb
Сообщения: 36
Зарегистрирован: 21 окт 2006, 22:32
Откуда: Пенза
Контактная информация:

Оказалось, что дело не в моём файле, а вообще. Модель, в которой отлавливается ситуации удалось предельно упростить.
- Создаем пустой файл Еxcel
- В Private Sub Workbook_Open() пишем примерно такой код:
Cells(1, 1).Select (можно другой)
- Устанавливаем курсор клавиатуры внутри процедуры или перед Private Sub
- Из VBE сохраняем файл и закрываем его.
- Открываем файл и не щелкая мышью и не переключая активную ячейку делаем короткий ввод в ту я чейку, которая при открытии выглядит как активная
- закрываем файл и на вопрос о сохранении отвечаем утвердительно
- может появиться сообщение об ошибки компиляции
Если Ошибка компиляции не показывается:
- открыть файл
- войти в VBE и посмотреть, что стоит перед Private Sub Workbook_Open(). Должны стоять буковки, которые вы ввели в ячейку.

Действительно, фокус не там оказался. Но в чём сам "фокус"?
-
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

Эффект не воспроизводится.
IMHO - кривой дополнительный софт/железо
Попробуйте проделать всё что вы написали в безопасном режиме (safe mode)
Ответить