Ну, на компьютерах, которые выходят из строя, работает ЛЮБОЙ код VBA? Итак, код кнопки, а что нет - проверьте, работают ли они. Если они не работают, то, конечно, код ленты не будет работать.
Другая проблема: проверьте, работает ли форма таймера. Помните, что идея FANTASTI C, которую вы используете, состоит в том, чтобы вызывать функции в форме, а НЕ ИСПОЛЬЗОВАТЬ ужасные обратные вызовы, которые ДОЛЖНЫ быть помещены в стандартные модули кода и, следовательно, не привязаны к данной форме, в которой 99% времени мы хотите, чтобы код в этой форме запускался и использовался (скажем, как любой стандартный код кнопки, но теперь вы используете ленту. Итак, ваша установка хороша и очень рекомендуется).
Некоторые вещи, которые нужно проверить для этого Ошибка: работает ли VBA вообще? Проверьте параметры надежного расположения.
Есть ли у вас форма таймера, работающая в фоновом режиме. Это ОЧЕНЬ, но ОЧЕНЬ ОЧЕНЬ ОЧЕНЬ важно проверить. Что происходит с формой таймера: то, что фокус формы фактически ИЗМЕНЯЕТСЯ к форме таймера во время выполнения кода таймера, а затем возвращается обратно к той форме, которая в данный момент имеет фокус. Это ОГРОМНО ОГРОМНО ОГРОМНО, поскольку при нажатии на кнопку ленты запускается ПЕРВАЯ ПОПЫТКА код в модуле кода текущей ориентированной формы. Это хорошо и здорово, так как, как вы заметили, Если у вас есть (и должен) быть тот код, который принадлежит этой форме.
Однако, ЕСЛИ В ТЕЧЕНИЕ ВРЕМЕНИ вы нажимаете на ленту, и текущие изменения формы изменяются (например, код таймера или другой код формы, который MIGHT / MAYBE / COULD / PERHAPS / POSSBILE меняет фокус формы на другой) ?
Хорошо, лента будет искать и пытаться найти эту подпрограмму в форме с текущим фокусом. Таким образом, запущенная форма таймера изменит фокус формы, и если вы нажмете эту кнопку во время кода формы таймера выполняется, тогда ТОЧНАЯ ФОРМА в ТОЧКУ ТОЧКИ во времени фактически имеет фокус, и, таким образом, Лента фактически попытается найти и запустить имя функции на вашей ленте в этой форме таймера !!
Вы можете довольно быстро протестируйте вышеупомянутое, удалив для проверки все формы таймера, которые у вас работают.
Другая вещь, которую нужно искать, это любой вид случайного изменения фокуса форм. Так, скажем, вы недавно добавили субформу или другую навигацию форма или что нет? Ну, теперь форма, на которую вы думаете, которая имеет фокус, на самом деле не имеет фокуса, и, следовательно, лента не может найти рутину бега Это часто случается, когда вы говорите, переключитесь на хороший новый компьютер, используете, скажем, среду выполнения. На более новой машине часто все работает намного лучше и быстрее, поэтому изменение фокусировки, которого вы не видели, теперь происходит гораздо более агрессивно.
Суть и то, что вы ищете здесь, это : Происходит ли непредвиденное изменение фокуса формы. Скажите какой-нибудь подформе, которая указывает на другую ленту, или на какое-то другое маленькое сообщение, диалоговое окно или всплывающую форму, которые оказались неожиданными. Если любой из этих объектов окажется в фокусе, ваша основная форма с кодом, который вызывают кнопки на ленте, не будет найдена.
Таким образом, это ненадежное расположение (ie: другой код VBA работает просто отлично), затем следует проверить и проверить, работает ли какая-либо форма таймера (поскольку, как было отмечено, такие формы ОЧЕНЬ быстро работают получить и отобрать фокус у текущих форм - и если вы одновременно нажмете ленту во время выполнения кода таймера, произойдет также изменение фокуса, и, таким образом, кнопка ленты потерпит неудачу.
Результат ТАКЖЕ означает: не используйте форму (ы) таймера, если вы можете избежать этого. Код таймера, если у вас есть, должен быть ОЧЕНЬ хорошим и эффективным кодом - лучше войти, запустить ОЧЕНЬ быстро и выйти.
У вас нет агрессивного интервала таймера. Так, скажем, какой-то таймер должен проверять и закрывать доступ? Ну, проверка 10 раз в секунду или даже раз в секунду ЗАВЕРШЕНА. 3 секунды.
Обратите внимание, что вышеуказанная проблема с таймером также часто приводит к сбою кнопок печати отчета - вы обнаруживаете, что печатается какая-то пустая форма (и эта пустая форма на самом деле является формой таймера, которая была в фокусе при нажатии кнопки печати отчета). )