Макрос запутался, различая ActiveWorkbook и ThisWorkbook - PullRequest
1 голос
/ 29 апреля 2019

1-й пост, но не первый раз - этот форум был неоценимым помощником в развитии моих навыков программирования на VBA за последние 3 года - большое спасибо.

Вот странная проблема, с которой я столкнулся.

Я создал шаблон на конец месяца для своей команды.В этом шаблоне хранится несколько макросов, в том числе некоторые из них активируются с помощью сочетаний клавиш.Эти активированные макросы ярлыков запускаются в других отчетах в формате CSV.

Я гарантировал, что макрос перестал работать, если бы активная рабочая книга была основной рабочей книгой, так как она выполняет много форматирования и может серьезно повредить основную рабочую книгу.

Таким образом, этот отказоустойчивый короткий код будет запускаться сотни раз в день ..... а иногда, один или два раза в месяц, Excel запутывается.Несмотря на то, что ActiveWorkbook не является ThisWorkbook, он действует так, как есть, и прерывает макрос.

'Запрещает запуск макроса в шаблоне распределения на конец месяца

Dim w As Workbook

Set w = ActiveWorkbook

If w Is ThisWorkbook Then
Exit Sub

End If

Я не могу разобраться с этим, код довольно прост и на 100% предотвращает нежелательныеповреждает основную книгу (главное на самом деле), но иногда мешает макросу форматирования запускать другие книги.

В тех редких случаях, когда это происходит, пользователь должен закрыть все книги Excel и после повторного открытия он снова будет работать нормально.: |

Это просто ошибка в Excel?Есть ли здесь что-то, чего я не учел, и следует ли этот код улучшить?Мне нравится его простота, и он на 100% предотвращает повреждения основной рабочей книги, меня просто раздражает, что Excel, похоже, запутывается из-за того, чем является / должен быть ThisWorkbook, и что я не могу это объяснить.

1 Ответ

0 голосов
/ 30 апреля 2019

Любая основная книга, которую вы не хотите, чтобы пользователи испортили, должна иметь защиту, которая отключается и включается вашими макросами.Отделите ваши данные от ваших взглядов.Блокируйте представления и изменяйте только данные.Для вас это означает, что CSV будет импортировать в столбцы на скрытом листе, а затем данные на вашем защищенном листе со связанной таблицей данных будут просто волшебным образом обновляться.Там не должно быть макросов форматирования.Формат статический.Связанные данные - это то, что меняется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...