Спасибо @jkpieterse и @Comintern за советы.
Причины проблемы были определены как переход на 64-битную версию Excel 2016 при использовании 32-битных элементов управления и кода VBA.
В конце концов, мы должны были внести ряд изменений, чтобы предотвратить сбой Excel.
1) Удаление всех ссылок на код и объект для объекта ListView.
2) Следуйте рекомендациям в этой статье Microsoft по обеспечению совместимости VBA с 64-разрядной версией Office 2016: https://docs.microsoft.com/en-us/office/client-developer/shared/compatibility-between-the-32-bit-and-64-bit-versions-of-office
3) В конечном итоге мы связались со службой поддержки Microsoft, которая рекомендовала, чтобы во избежание сбоя Excel возникла проблема с установкой нового раздела реестра:
HKEY_CURRENT_USER \ Программное обеспечение \ Microsoft \ Office \ 16.0 \ Excel \ Options \
Имя: ForceVBALoadFromSource
Тип: DWORD
Значение = 1
(См. Статью базы знаний: https://support.microsoft.com/en-gb/help/4011597/december-5-2017-update-for-excel-2013-kb4011597)
Они объяснили, что это исправление, разработанное Microsoft, чтобы заставить Excel полностью компилировать VBA на 64-битных системах, что предотвращает проблемы, когда 32-битный код частично компилируется.
Очевидно, что вы должны сделать резервную копию реестра и создать точку восстановления, прежде чем применять это исправление (и проконсультироваться с техническим отделом, если оно у вас есть!)
До звонка в службу поддержки я сузил точку сбоя до момента вызова конкретной формы. До этого момента код VBA работал нормально, соединение ADODB было успешно установлено с базой данных SQL Server с возвращаемыми данными. При вызове формы приложение вылетало. Если я загружал другую форму, приложение не зависало, что означало наличие других элементов управления или кода, вызывающих ошибку или конфликт компиляции.
Кроме того, я обнаружил, что приложение не зависало, если окно редактора Visual Studio уже было открыто. Мне удалось добавить строку кода, чтобы программно открыть окно VBE (плюс некоторые, чтобы изменить его размер, чтобы он не скрывал форму):
Application.VBE.MainWindow.Visible = True
With Application.VBE.MainWindow
.Width = 500
.Height = 500
End With
После добавления этого кода приложение также не зависало.
Форма проблемы была слишком сложной для воссоздания без значительных затрат на разработку. К счастью, исправление Microsoft решило проблему.