25

我有一个用 VBA/Excel 开发的旧应用程序,它使用 ListView 控件。不幸的是,这些控件似乎无法与 64 位版本的 Excel 一起使用

Office 2010 中的本机 64 位进程无法加载 32 位二进制文​​件。这包括 MSComCtl [例如 ListViews] 的常用控件。当代码迁移到 64 位 Office 2010 时,必须为使用这些控件的现有 Microsoft Office VBA 解决方案找到替代方案。

我需要将该旧应用程序迁移到 Excel 2010/13 x64。ListView除了那些控制之外,这个过程大多是无痛的。

我替换ListView控件的主要选项是什么,哪个是最有效的(从时间和实施难度的角度来看)?

笔记:

  • 这个问题已经在MS 论坛上提出,但没有给出实际的答案。
  • 添加.net标签,因为我怀疑一些解决方案可能来自那里。

为了更清楚,这里是 Excel 用户表单的快照。底部是列表视图(我隐藏了机密信息),它具有可排序的列,允许用户选择多个非连续的行。

在此处输入图像描述

4

4 回答 4

9

理论上可能的一件事是将您的显示代码编写为 .Net 程序集并通过 COM 从您的 VBA 代码访问它(例如,请参阅如何从 Excel VBA 中使用 .NET 对象?作为起点这个怎么做)。

这样您就可以为您的控件编写 .Net 代码。我自己没有这样做,并且不确定它对您的问题的适用程度如何,但它看起来像是一种选择。

我刚刚找到了一个从 Excel 调用 .Net 的简短教程

于 2013-06-01T14:56:37.627 回答
5

我不知道这里有任何解决方案。然而,JKP在 VBA 中开发了一个带有用户窗体的原生 TreeView,只是为了替换 TreeView——它在 64 位下运行良好。

虽然劳动强度大,但您可以考虑将其用于 ListView 控件...

于 2013-05-28T13:49:38.020 回答
1

如果有人仍然感兴趣,我设法把一些东西放在一起(4 年前)。我记得这是一个非常痛苦的过程,因为多年来创建 COM 接口的过程发生了变化,并且有一些不同的方法/引用。此外,由于 COM 的工作方式,它需要使用双接口。我没有公开所有属性/事件,但我做了您可能需要的主要属性/事件。代码是用 VS2010 用 C# 编写的;我没有测试代码是否仍然可以编译,无论哪种方式,如果您注册库(请参阅 Reg.bat),您应该能够使用 Bin 文件夹中的 .DLL。它在 Tool->References 下显示为“ 64bit COM Interface v1.2 for .Net Common Controls ”。

于 2020-10-09T17:14:51.757 回答
-1

您需要删除然后重新注册控件,它会正常工作。使用 RegSvr32 重新注册控件。

有关详细信息,请参阅此链接:http: //answers.microsoft.com/en-us/office/forum/office_2010-access/listview-issue-in-access-2010/d0b6f86a-1d9c-4d7f-8566-b80a10bb67c6

于 2013-06-04T17:32:53.530 回答