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组件。”不出意外。
答案 0 :(得分: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”。
答案 1 :(得分:0)
将文件加载到Excel工作簿中。它应该能够动态转换lotus123工作簿。
答案 2 :(得分:-2)
首先,检查以确保您的内容(我认为在工具菜单,包含或引用或类似内容)包括引用Lotus123.Document的库。有可能是在“Microsoft Excel 14.0对象库”或类似的。
我听说它说VB is not VBA!