Подтвердить что ты не робот

Ищете альтернативы 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

4b9b3361

Ответ 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