Ищете альтернативы 32-разрядным Microsoft Common Controls (ListView)
У меня есть устаревшее приложение, разработанное в VBA/Excel, которое использует элементы управления ListView. К сожалению, это выглядит как эти элементы управления не могут использоваться с 64-разрядными версиями Excel:
Собственные 64-разрядные процессы в Office 2010 не могут загружать 32-битные двоичные файлы. Это включает в себя общие элементы управления MSComCtl [такие как ListViews]. Альтернатива должна быть найдена для существующих решений Microsoft Office VBA, которые используют эти элементы управления, когда код переносится в 64-разрядный Office 2010.
Мне нужно перенести это устаревшее приложение в Excel 2010/13 x64. Этот процесс в основном безболезнен, за исключением тех ListView
элементов управления.
Каковы мои основные возможности для замены элемента управления ListView
и который будет наиболее эффективным (с точки зрения времени и сложности для реализации перспективы)?
Примечания:
- Эта проблема была поднята на форумах MS, но практический ответ не дал.
- добавление тега
.net
, поскольку я подозреваю, что некоторые решения могут прийти оттуда.
Чтобы сделать его более понятным, вот моментальный снимок формы пользователя Excel. Нижняя часть - это вид списка (у меня есть скрытая конфиденциальная информация), который имеет сортируемый столбец, позволяет пользователю выбирать несколько строк, не связанных друг с другом.
![enter image description here]()
Ответы
Ответ 1
Теоретически возможно было бы написать ваш отображаемый код как сборку .Net и получить доступ через COM из вашего кода VBA (см., например, Как я могу использовать .NET-объекты из Excel VBA? в качестве отправной точки для того, как это сделать).
Таким образом вы можете написать код .Net для своих элементов управления. Я не сделал этого сам и не уверен, насколько хорошо он относится к вашей проблеме, но он выглядит как вариант.
Я только что нашел короткий учебник для вызова .Net из Excel.
Ответ 2
Я не знаю ни одного решения здесь. Однако JKP разработал собственный TreeView в VBA с Userforms только, чтобы заменить TreeView, который отлично работает под 64 бит.
Несмотря на интенсивность работы, вы могли бы рассмотреть возможность использования его в элементе управления ListView...
Ответ 3
Я заметил, что это исправлено в Excel 2016 на Office 365 сейчас.
Это было исправлено тайно? Когда это было исправлено?
Я использую 64-битную версию Office365 Excel 2016
Файл MSCOMCTL.ocx находится в
C:\Program Files\Microsoft Office\root\vfs\System
Я сделал xls файлы, которые имеют пользовательскую форму со списком и древовидную структуру в Excel 2016 32-битная версия.
Затем я скопировал файл на другую машину с 64-разрядной версией Excel 2016.
Сегодня ошибок не возникает.
Ответ 4
Вам нужно удалить, а затем перерегистрировать элемент управления, и он будет работать нормально. Используйте RegSvr32 для перерегистрации элемента управления.
Смотрите эту ссылку для получения дополнительной информации: http://answers.microsoft.com/en-us/office/forum/office_2010-access/listview-issue-in-access-2010/d0b6f86a-1d9c-4d7f-8566-b80a10bb67c6