2

VBA 代码效果很好:

Sub testVBA()

    Dim wb As Object ' Lotus123.Document
    Set wb = GetObject("S:\Temp\T\0375D.WK3", "Lotus123.Workbook")

End Sub

VB.net 代码失败:

Sub TestVBNet()

    Dim wb As Object ' Lotus123.Document
    wb = GetObject("S:\Temp\T\0375D.WK3", "Lotus123.Workbook")

End Sub

在 VB.net 中,我得到一个 FileNotFoundException:“在自动化操作期间找不到文件名或类名。”

因为我可以从 VBA 运行它,这意味着文件存在并且类名存在。那么为什么它不起作用以及如何在 VB.net 中修复它。

编辑:我想我不确定如何开始诊断:显然该类存在于我的计算机上,但不知何故 VB.net 无法找到它。也许 VB.net 使用不同的方法来激活该类。可能缺少注册表项。我很高兴有任何建议。

编辑 2:我也尝试使用 CreateObject 并收到此错误:“无法创建 ActiveX 组件。” 并不意外。

4

3 回答 3

2

由于某种原因,VB.net 找不到类名“Lotus123.Workbook”,所以我尝试获取没有类名的文件,它在 XP 中工作正常。

Dim wb As Object ' Lotus123.Document
wb = GetObject("S:\Temp\T\0375D.WK3")

编辑:在 Win8 64bit 中,以上不起作用;只是挂起。

下面的代码适用于 XP 32 位和 Win8 64 位。我用进程监视器检查了引擎盖下发生的事情。CreateObject 使用给定对象检查注册表中的 CLSID。然后它使用 CLSID 查找必要的信息。

Public Shared Function GetLotusWB(ByVal sFile As String) As Object

    'HKCU takes precedence if exists
    'HKCU\Software\Classes\Lotus123.Workbook\CLSID
    'HKCU\Software\Classes\CLSID\{29130007-2EED-1069-BF5D-00DD011186B7}

    'normally this is used because Lotus123 doesn't create HKCU entries
    'HKCR\Lotus123.Workbook\CLSID = {29130007-2EED-1069-BF5D-00DD011186B7}
    'HKCR\CLSID\{29130007-2EED-1069-BF5D-00DD011186B7}\InprocHandler32 = ole32.dll
    'HKCR\CLSID\{29130007-2EED-1069-BF5D-00DD011186B7}\LocalServer32 = C:\Lotus\123\123w.exe

    'using object as that sometimes works better
    Dim LotusObj As Object = CreateObject("Lotus123.Workbook")

    'get application
    'need a reference to Lotus 123 else declare as Object
    Dim LotusApp As Lotus123.Application = LotusObj.Application
    'FAILS: LotusApp.Visible = True

    'open file; also works fine As Lotus123.Document
    Dim ldoc As Object = LotusApp.OpenDocument(sFile)

    'visible and activate (must declare as Object else gives exception)
    Dim appObject As Object = ldoc.Application 
    appObject.Visible = True
    ldoc.Activate()

    Return ldoc

End Function

这很好用,因为它创建了用于获取应用程序对象的“Lotus123.Workbook”。

于 2014-01-09T05:06:03.137 回答
0

将文件加载到 Excel 工作簿中。它应该能够即时转换 lotus123 工作簿。

于 2014-01-08T19:18:23.247 回答
-2

首先,检查以确保您的包含(我认为在工具菜单下,包含引用或类似的东西)包括引用 Lotus123.Document 的库。它可能位于“Microsoft Excel 14.0 对象库”或类似文件中。

我听说它说VB不是VBA

于 2014-01-08T18:59:35.903 回答