VBA - Неверное количество диапазонов подключения при увеличении второго окна - PullRequest
0 голосов
/ 30 октября 2018

Взять файл с сводной таблицей и некоторыми данными / фильтром:

enter image description here

Поместите следующий метод в метод "BeforeClose":

Private Sub Workbook_BeforeClose(Cancel As Boolean)

    'ThisWorkbook.connections(1).Ranges.count

End Sub

Теперь, если вы закроете этот файл (и установите точку останова), вы заметите, что закомментированный оператор имеет следующее значение:

1

И это, как и следовало ожидать, потому что у нас есть одно соединение, одна сводная таблица, достаточно прямолинейная. Теперь повторите те же шаги, но когда вы закрываете файл, сначала откройте пустой файл Excel и закройте основной файл, когда он свернут:

enter image description here

Теперь вы получите:

0

Теперь, как это может быть? Это не мое понимание , как это свойство работает . Я думал, что "ThisWorkbook" был:

"Свойство ThisWorkbook гораздо проще понять, просто ссылается на книгу Excel, в которой выполняется код VBA. "

Что я тут не так делаю? «Соединение» найдено, но свойство диапазона кажется неправильным, когда второй файл активен. Моим первоначальным намерением было определить, где использовалось соединение . Может я ошибаюсь?

Обновление 1

Упс, извините за всю путаницу с MsgBox, похоже, что (в моей предыдущей версии вопроса) MsgBox снова делает окно активным и отображает 1, а не значение, присутствующее в коде. Однако, если вы установите точку останова на линии, вы увидите проблему до того, как окно станет активным:

enter image description here

Так что проблема по-прежнему актуальна, мне просто сложно воспроизвести это так, чтобы это было легко видно (и передавалось при переполнении стека). Возможно, потенциальным обходным решением было бы сделать текущее окно активным окном перед закрытием. Тем не менее я хотел бы понять причину этого странного поведения.

Я обновил исходный вопрос этим разъяснением и удалил непонятную проблему MsgBox. Спасибо всем за хороший улов.

1 Ответ

0 голосов
/ 09 ноября 2018

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

Debug.Print ThisWorkbook.Connections(1).Parent.Name
Debug.Print ThisWorkbook.Connections(1).Name

И все же счетчик изменится на ноль при сворачивании. Это похоже на ошибку. Сообщить об этом в Microsoft. Вы можете нажать File > Feedback, а затем искать недовольное лицо, чтобы оставить отзыв.

Вы также можете создать ветку о проблеме на форумах MS, где проблема может быть передана разработчикам: https://answers.microsoft.com/en-us

...