Взять файл с сводной таблицей и некоторыми данными / фильтром:
Поместите следующий метод в метод "BeforeClose":
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'ThisWorkbook.connections(1).Ranges.count
End Sub
Теперь, если вы закроете этот файл (и установите точку останова), вы заметите, что закомментированный оператор имеет следующее значение:
1
И это, как и следовало ожидать, потому что у нас есть одно соединение, одна сводная таблица, достаточно прямолинейная. Теперь повторите те же шаги, но когда вы закрываете файл, сначала откройте пустой файл Excel и закройте основной файл, когда он свернут:
Теперь вы получите:
0
Теперь, как это может быть? Это не мое понимание , как это свойство работает . Я думал, что "ThisWorkbook" был:
"Свойство ThisWorkbook гораздо проще понять, просто
ссылается на книгу Excel, в которой выполняется код VBA. "
Что я тут не так делаю? «Соединение» найдено, но свойство диапазона кажется неправильным, когда второй файл активен. Моим первоначальным намерением было определить, где использовалось соединение . Может я ошибаюсь?
Обновление 1
Упс, извините за всю путаницу с MsgBox, похоже, что (в моей предыдущей версии вопроса) MsgBox снова делает окно активным и отображает 1, а не значение, присутствующее в коде. Однако, если вы установите точку останова на линии, вы увидите проблему до того, как окно станет активным:
Так что проблема по-прежнему актуальна, мне просто сложно воспроизвести это так, чтобы это было легко видно (и передавалось при переполнении стека). Возможно, потенциальным обходным решением было бы сделать текущее окно активным окном перед закрытием. Тем не менее я хотел бы понять причину этого странного поведения.
Я обновил исходный вопрос этим разъяснением и удалил непонятную проблему MsgBox. Спасибо всем за хороший улов.