为什么代码在 VB.net 中不起作用,但在 VBA 中却可以;获取对象

2023-11-29

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 组件。”并不意外。


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

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

编辑:在 Win8 64 位中,上述内容不起作用;只是挂起。

下面的代码适用于 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”。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么代码在 VB.net 中不起作用,但在 VBA 中却可以;获取对象 的相关文章

随机推荐

  • 转换unicode

    我有一个UITextField输入一个unicode值 当我点击UIButton需要将其转换并显示在UILabel 下面的代码对我来说工作正常 我的代码中的unicode NSString str NSString stringWithUT
  • 范围解析运算符和常量

    我们来看下面的代码 include
  • 类型擦除类型擦除,“有什么”问题吗?

    所以 假设我想使用类型擦除来键入擦除 我可以为变体创建伪方法 以实现自然的 pseudo method print auto self auto os os lt lt self std variant
  • 删除多维数组

    在 C FAQ 中 16 16 给出了以下示例 void manipulateArray unsigned nrows unsigned ncols typedef Fred FredPtr FredPtr matrix new FredP
  • MVC3 和 Code First 迁移 - “自数据库创建以来,支持‘blah’上下文的模型已发生变化”

    我使用 Entity Framework Code First 开始我的项目 当我准备好后 我将数据库和代码上传到我的主机提供商 一切顺利 我需要向我的一个类添加一个新字段 并且我不想丢失数据库中的数据 因此 我尝试关注一些有关使用 Cod
  • 如何使用 jQuery 更改元素的同级文本而不更改 html?

    我试图仅替换文本 但不触及任何其他标签 p a href login php i class fa fa sign in i Login a p p each function this text this text replace Log
  • 无法使用 MRTK v2.0.0-RC1 进行构建

    我曾尝试在 Unity 2018 3 10f1 上构建新 MRTK 版本 2 0 0 RC1 的场景示例 但每次每个示例都会出现构建错误 其中显示 找不到类型或命名空间名称 HandJointKind 您是否缺少 using 指令或程序集引
  • 在Python中,我可以调用导入模块的main()吗?

    在Python中我有一个modulemyModule py 我在其中定义了一些函数和一个main 它需要一些命令行参数 我通常从 bash 脚本中调用这个 main 现在 我想把一切都放进一个小package 所以我想也许我可以将我的简单b
  • 日期时间到数字以及向后转换

    R 中的日期 时间我有这个日期 2016 10 29 15 00 00 我想将其转换为数字并向后转换为我的相同日期和时间 我用它来将其转换为数字 as numeric as POSIXct 2016 10 29 15 00 00 我怎样才能
  • 如何在pyspark中使用多行选项将数据帧保存到json文件中

    在 Pyspark 中 我想将数据帧保存为 json 文件 但格式如下 说这是我的数据框 gt gt gt rdd1 show f1 f2 AAAAAAAAAA 99999 BBBBBBBBB 99999 CCCCCCCCC 99999 如
  • 在 FirebaseDatabase.getReference() 中获取 NPE

    我在应用程序启动时在生产版本中获得 NPE 并且在使用 adb 重新安装后仅获得一次 NPE Caused by java lang NullPointerException Attempt to invoke interface meth
  • 使用 DecorlatedJitterBackoff 的最大重试次数

    我正在使用 polly DecorlatedJitterBackoff 策略来重试 http 请求 我的用例是 当 timeSpan 达到 300 秒时 它应该每 300 秒重试 int maximum 次数 我正在尝试使用以下代码来实现此
  • 将 JPanel 中的 JLabel 定位在图像下方

    我想将给定示例中的文本移动到图像和形状下方 请帮我做一下 package test import java awt BasicStroke import java awt Graphics import java awt Graphics2
  • RestSharp 身份验证器遵循 302 重定向

    我正在尝试使用 RestSharp 向 API 发出请求 通过将请求重定向到登录服务器 使用基本凭据进行身份验证 获取 cookie 然后重定向回 API 来保护此 API 恐怕我无法控制这个 所以请求的顺序是 Request Respon
  • Swift:使用 WKWebView 的 createPdf 创建 pdf

    Edit 在找到问题 2 的解决方案后 并且给人的印象是问题 1 没有简单的 开箱即用的解决方案 我决定关闭这个问题 而专门针对分页问题创建另一个问题 我有两个问题WKWebViews createPDF configuration com
  • Threejs 拖动点

    我必须生成大量可以单独拖动的对象 此外 这些物体仅限于平面形状 例如矩形或圆形 起初 我使用简单的 CircleGeometries 将其放置在另一个几何图形 平面 内 拖动它们也很容易 但正如预期的那样 大约 200000 个它们的性能非
  • VSTS Microsoft 托管代理:虚拟机大小

    根据https github com MicrosoftDocs vsts docs blob master docs pipelines agents hosted mdMicrosoft 托管代理的虚拟机大小为 目前使用 Microso
  • 为什么 CSS 选择器/HTML 属性首选破折号?

    过去我总是使用下划线来定义class and idHTML 中的属性 在过去的几年里 我改用破折号 主要是为了使自己与社区趋势 不一定是因为它对我有意义 我一直认为破折号有更多的缺点 但我没有看到它的好处 代码完成和编辑 大多数编辑器将破折
  • 优化多个文件的并行处理

    我有一个程序处理很多文件 其中每个文件需要完成两件事 首先 读取并处理文件的某些部分 然后生成结果MyFileData被存储 第一部分可以并行 第二部分则不能 按顺序执行所有操作非常慢 因为 CPU 必须等待磁盘 然后它会工作一点 然后发出
  • 为什么代码在 VB.net 中不起作用,但在 VBA 中却可以;获取对象

    VBA 代码效果很好 Sub testVBA Dim wb As Object Lotus123 Document Set wb GetObject S Temp T 0375D WK3 Lotus123 Workbook End Sub