【问题标题】:Looking for alternatives to 32-bit only Microsoft Common Controls (ListView)寻找仅 32 位 Microsoft Common Controls (ListView) 的替代品
【发布时间】:2013-05-28 12:44:17
【问题描述】:

我有一个用 VBA/Excel 开发的旧应用程序,它使用 ListView 控件。不幸的是,它看起来像these controls can't be used with 64-bit versions of Excel

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

我需要将该旧应用程序迁移到 Excel 2010/13 x64。除了那些ListView 控件之外,该过程几乎没有痛苦。

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

注意事项:

  • 此问题已在MS forums 上提出,但尚未给出实际答案。
  • 添加.net 标签,因为我怀疑一些解决方案可能来自那里。

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

【问题讨论】:

  • 您正在使用哪些 ListView 功能?列标题?团体?一个所有者绘制的 ListBox 可以让你走多远?
  • @shambulator 主要是:标题、列排序、多行选择、列自动调整大小。
  • ListView 是在用户窗体中还是直接在工作表中?如果是后者,如何使用 Excel 表格(即ListObjects)并添加一些带有事件的个人行为(例如多选行、对列进行排序)?
  • @PeterAlbert 它们在表单中,使用户可以在电子表格上进行操作时将它们放在面前。
  • 那是不切实际的... + 1 BTW 一个好问题 :)

标签: .net excel vba listview 64-bit


【解决方案1】:

理论上可行的一件事是将您的显示代码编写为 .Net 程序集,并通过 COM 从您的 VBA 代码访问它(例如,请参阅 How can I make use of .NET objects from within Excel VBA? 作为如何执行此操作的起点)。

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

我刚刚找到了一个short tutorial,用于从 Excel 调用 .Net。

【讨论】:

  • 这可能可行,但我对 .net 不是很熟悉(我通常使用 Java),我不确定如何转换该示例以在用户表单中显示复杂对象。
  • 在我学会了如何使用 Visual Studio 和 .NET 之后,我彻底放弃了 VBA,开始使用 .NET 互操作。
【解决方案2】:

我不知道这里有任何解决方案。但是,JKP 开发了a native TreeView in VBA with Userforms only 来替换 TreeView - 在 64 位下可以正常工作。

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      查看此链接了解更多信息:http://answers.microsoft.com/en-us/office/forum/office_2010-access/listview-issue-in-access-2010/d0b6f86a-1d9c-4d7f-8566-b80a10bb67c6

      【讨论】:

      • 你试过了吗?我认为SysWow64 文件夹中的 RegSvr32(如您的链接中所述)只能注册 32 位库。 Excel x64 中不提供 32 位库。
      • 我的错,我错过了关于它是 32 位的部分。我的所有搜索都显示人们必须创建自己的控件,而且似乎没有人过于渴望发布他们的结果。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-21
      • 2015-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多