“RPC 服务器不可用。”循环遍历Word文档时

2024-04-19

我正在开发一个实用程序来查找和更新 Word 中的 DOC 变量。我有一段代码可以循环遍历文档并显示带有变量名称的消息框,但是当它尝试打开下一个文档时收到错误。错误是:

System.Runtime.InteropServices.COMException:“RPC 服务器不可用。 (HRESULT 异常:0x800706BA)

我很困惑,因为我的代码无法访问任何网络。我认为可能发生的情况是文档关闭时 Word 也关闭,但我找不到解决方案来阻止这种情况。

我尝试过的其他事情:

  1. 确认UAC已禁用
  2. 确认 RPC 服务正在运行
  3. 已确认 RPC 和 DCOM 的注册表值正确

    Private Sub LoopTemp()
        Dim oDir As New DirectoryInfo(dPath)
        Dim oFileArr As FileInfo() = oDir.GetFiles()
        Dim oFile As FileInfo
        Dim oVar As Variable
        Dim oDoc = New Document()
    
        Dim oWord As Application
        oWord = CreateObject("Word.Application")
        oWord.Visible = False
    
        For Each oFile In oFileArr
           oDoc = oWord.Documents.Open(oFile.FullName)
    
           For Each oVar In oDoc.Variables
               MsgBox(oVar.Name)
           Next
    
           oDoc.Close(SaveChanges:=WdSaveOptions.wdSaveChanges)
    
        Next
        oWord.Quit()
    End Sub
    

当指向 COM 对象的“指针”在代码尝试重新使用它之前未从内存中正确释放时,就会出现 RPC 错误。从应用程序本身外部自动化 Office 应用程序时,这是一个很常见的问题。尤其是在使用 .NET 进行工作时,必须格外小心。

另一个需要注意的非常重要的事情是New关键字不得与任何 Office 对象一起使用except Application。尽管 API 允许,但切勿使用New Document使用 Word,因为这会创建一个Document无法正确释放的对象。

出于效率考虑,启动Word应用程序once应该足够了 - 只要正确释放它使用的 COM 对象(设置为Nothing和垃圾收集)。

我将在问题中编写代码如下:

Private Sub LoopTemp()
    Dim oDir As New DirectoryInfo(dPath)
    Dim oFileArr As FileInfo() = oDir.GetFiles()
    Dim oFile As FileInfo
    Dim oVar As Variable = Nothing
    Dim oWord As Application = NOthing
    Dim oDoc As Document = Nothing

    oWord = New Word.Application
    oWord.Visible = False

    For Each oFile In oFileArr
        oDoc = oWord.Documents.Open(oFile.FullName)
        For Each oVar In oDoc.Variables
            MsgBox(oVar.Name)
        Next
        oVar = Nothing
        oDoc.Close(SaveChanges:=WdSaveOptions.wdSaveChanges)
        oDoc = Nothing

        GC.Collect()
        GC.WaitForPendingFinalizers()
        GC.Collect()
        GC.WaitForPendingFinalizers() 
    Next

    oWord.Quit()
    oWord = Nothing
    GC.Collect()
    GC.WaitForPendingFinalizers()
    GC.Collect()
    GC.WaitForPendingFinalizers()

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

“RPC 服务器不可用。”循环遍历Word文档时 的相关文章

  • 正则表达式 VB.Net 正则表达式.替换

    我正在尝试执行一个简单的正则表达式查找和替换 在字符串中的一些数字后面添加一个制表符 如下所述 From a users 12345 badges To a users 12345 badges 我正在使用以下内容 s regex repl
  • PMT功能 支付方式

    下面是我计算贷款付款的函数 就像在 Excel 中一样 我需要添加另一个参数 即付款类型 function PMT ir np pv fv ir interest rate per month np number of periods mo
  • 多线程应用程序的调用方法?

    我的应用程序中有一个错误 与here http forums ni com t5 Measurement Studio for NET Waveform Graph quot X quot Error m p 217817 highligh
  • 如何在 VB.NET 中实现包含结构体参数的 C# 委托?

    给定 C 中的以下委托定义 struct Dummy delegate int ReceiveDummy in Dummy dummy 如何将 VB Net 子程序分配给 ReceiveDummy 类型 以下两个函数定义都会失败 并出现错误
  • 使用新数据输入自动更新图表

    我的图表从 DataGridView 加载数据 如果将新值插入到 DataGridView 中 我希望自动使用新数据更新图表 我的图表必然是table1 and table2在我的 DataGridView 中 它从 DataTable 获
  • 安装文件失败调试已启用

    我之前使用过安装项目 没有任何问题 该项目没有 SQLite DB 作为依赖项我现在正在尝试为一个包含 SQLite 作为 System Data SQLite Core 的项目制作一个 EXE 或 msi 文件 该项目是一个带有 WPF
  • 更改数据网格列顺序或索引

    这是我无法相信我无法弄清楚的事情 请告诉我我错过了一些简单的事情 我有一个数据网格 我用 LINQ 填充它以及一个自定义类来向其中添加数据 之后 我需要按特定顺序排列数据 它似乎忽略了我 如何更改列属性 例如索引等 这是我正在使用的 LIN
  • 如何在 ASP.NET 中检查用户是否在线?

    该网站 最后活动 1 分钟前来自此 IP 地址 背后的逻辑是什么 如果您在隐藏字段中获取用户的 IP 地址 我该如何在 vb net 中执行此操作 我如何查看有多少用户在线使用该应用程序 ASP NET 会员服务支持此功能 要获取特定用户的
  • 使用 VB.Net 的 GhostText

    大家好 我尝试创建一个幽灵文字在文本框上使用标签 我使用的是VB Net2005 我用这段代码完成了这个 Public Class frmDataEntry Private Sub PhantomTextLastName If txtLas
  • 命令式代码与声明式代码[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我试图理解命令式范例和声明式范例之间的区别 因为我必须对 Visual Basic 进行分类 NET 在不同的范式中 除了面向对象之外
  • 为什么 Dictionary 上的这个 Linq 查询不作为数据源工作

    我在VB中有以下内容 Dim sources From source In importSources Select New With Type source Key Source source Value Name dgridSource
  • 多个 Visual Studio 项目抱怨临时文件丢失,因此无法打开。错误代码 &H80070003

    我在终端服务器上运行 Visual Studio 2010 并且已经运行了一段时间 问题相对较少 今天早上 我启动了我的电脑 在英国的长周末期间 似乎出现了以下问题 我有很多项目 但不是我的所有项目 也不是给定解决方案中的所有项目 抱怨无法
  • 父窗体中的居中消息框[重复]

    这个问题在这里已经有答案了 有没有一种简单的方法可以在 net 2 0中将MessageBox居中于父窗体中 我在 C 中确实需要这个并发现中心消息框 C http bytes com topic c sharp answers 26712
  • 使用正则表达式验证器上传文件不适用于仅 Firefox IE

    我有一个带有 RegularExpressionValidator 的 FileUpload 和以下验证表达式 a zA Z 2 w w w gif jpg JPG JPEG GIF jpeg png bmp 3dm 3dmf ai drw
  • 根据所选单选按钮启用文本框

    我有一个单选按钮列表 其中列出了不同的业务类别 最后一个选项是Other类别 当用户选择Other类别 我希望能够启用一个文本框 用户可以输入更多信息来解释Other选择 目前 我正在尝试 If rblCategory SelectedIn
  • Word通过vba宏删除tabe列出现错误

    我想将excel中的数据复制到word表中 然后从表中删除一些列 我可以将数据复制到表中 但是当我删除列时会出现错误 无法访问此集合中的各个列 因为该表具有混合的单元格宽度 我的代码 Public Tbl1 As Table Sub cal
  • 无法在 VB MVC 应用程序中创建 HtmlHelper 方法

    我无法弄清楚以下代码中缺少什么 我有一个应该添加 虚拟 辅助扩展的方法 Imports System Runtime CompilerServices Namespace HtmlHelpers Public Module HelpExte
  • Visual Studio 改变 Ctrl-K-D 的工作方式

    In Visual Studio I m using 2012 is there any way of editing the way that Ctrl K D combinations handles its Auto Formatti
  • 如何创建未定义的循环计数

    我正在尝试创建一个程序 它将循环遍历所有字母 我想要例如显示aaaa then aaab to aaaz then aaba依此类推zzzz 问题是 如何让用户输入字母计数 这是我的代码 只有 3 个字母 Dim abc As String
  • 如何使用 VB.NET 打开受密码保护的共享网络文件夹?

    我需要在网络上打开受密码保护的共享文件夹才能访问 Access 97 数据库 如何打开文件夹并输入密码 在这里找到http www mredkj com vbnet vbnetmapdrive html http www mredkj co

随机推荐

  • 我们需要为每个子例程创建一个错误处理程序吗?

    我从SO中复制了一段代码作为示例 该子例程包含一个错误处理程序 是否应该为所有 Sub 制定一个错误处理程序 Public Sub SubA On Error Goto ProcError Connection Open Open File
  • 更新两个表的 SQL 触发器

    我是 SQL 新手 有人可以帮我修复下面的触发器吗 我有这 2 个表 评论和报价 我想更新评论表插入 更新和删除 从报价表中获取数据 如果更新成功 我想使用 ReviewId 和 ReviewDate 更新报价表 我使用的是Azure提供的
  • JQuery Ajax 火狐错误

    下面的代码在 Chrome 和 IE 中都可以正常工作 get ajax BTBookAppointment aspx dsl telNumberBox value date requiredDate value timeslot ddTi
  • 从连接到计算机并在成像设备中列出的相机捕获图像

    我有一台佳能 EOS 1000D 当我将其连接到计算机时 它列在 控制面板 gt 成像设备 下 我想以编程方式拍照 我猜想成像设备中列出的所有设备都具有相同的接口 可能是 TWAIN 并且具有向它们发送命令的标准方法 TWAIN可以做到吗
  • Rails 6 中是否必须手动将 ApplicationHelper 包含在 ApplicationController 中?

    控制器 class FooController lt ApplicationController def index bar method 应用程序助手 module ApplicationHelper def bar method 查看索
  • 如何禁止在Python中创建新的类属性?

    这可能看起来是一个非常基本的问题 但我在 SO 或其他地方找不到任何有用的东西 如果您参加内置课程 例如int or list 没有办法为它们创建额外的类属性 这显然是一个理想的行为 gt gt gt int x 0 Traceback m
  • 在 Django REST 框架中序列化内部方法字段

    例如 我有两个模型 Model1 and Model2 它们在模型级别上不通过任何关键字段直接相互关联 对于这两种模型 我都有序列化器 我正在寻找拥有的方式Model2查询集在Model1序列化器 例如 GET api model1 01
  • 无法在运行 apache 服务器上访问 http://localhost:80

    在 ubuntu 14 04 中运行 apache 服务器时我得到 This webpage is not available 在浏览器中或 curl 7 Failed to connect to localhost port 80 Con
  • 视图的高效“屏幕截图”?

    TL DR 自从getDrawingCache 似乎触发了一个完整的重绘View当启用硬件加速时 是否有其他方法获得Bitmap 或类似的东西 可以避免这种情况 也许是通过读取填充到 硬件 软件 层的数据View最后被抽到了 一些背景 自
  • 第一个 cURL 请求验证 GCM api 密钥

    目前正在尝试使用 GCM API 密钥构建我的第一个 Android 应用程序 一款营销软件将使用该密钥来发送推送通知 想要获得一些帮助 通过curl请求验证我的谷歌云消息 GCM API密钥 我尝试使用在线卷曲生成器 但结果与我期望的成功
  • Common Lisp 鼠标位置与 ltk

    我正在 Common Lisp 中制作一个简单的小程序 我想使用鼠标移动来控制它 我用 LTK 作为窗口 我找不到任何可以检索鼠标位置的函数 例如 Emacs Lisp 有 鼠标像素位置 我发现这在罗塞塔代码上 https rosettac
  • 为 WebRTC 应用程序实现我们自己的 STUN/TURN 服务器 [重复]

    这个问题在这里已经有答案了 我正在开发一个 webrtc 应用程序 并且必须实现以下 TURN 服务器 https code google com p rfc5766 turn server https code google com p
  • R 中的旋转轴标签

    如何使 条形 图的 y 轴标签平行于 X 轴而不是平行于 Y 轴 不确定这是否是您的意思 但尝试设置las 1 这是一个例子 require grDevices tN lt table Ni lt stats rpois 100 lambd
  • php中比较字符串的方法

    我想比较两个字符串并返回比较级别 字符串 1 是输入 可以采用来自客户端的多种格式 例如 string 1 GCSE English Lang Year 10 or string 1 Year 10 Eng Lang GCSE etc 字符
  • 如何在 VB.NET 中调用异步 Web 请求?

    我目前正在使用以下代码来创建网络请求 Dim myRequest As WebRequest WebRequest Create http foo com bar Dim myResponse As WebResponse myReques
  • 在 iOS 中加载/保存设置

    我在 AppDelegate 中定义了以下两个过程 保存设置和加载设置 单击保存按钮后 我将在 AppDidFinishLaunching 方法中调用 loadSettings 过程 并在设置视图中调用 saveSettings 过程 这两
  • 从外部源填充运行时天蓝色管道参数

    我们希望创建一个管道来更新我们的多租户 Azure 环境 我们需要在每个租户的更新过程中执行一些操作 为了实现这一目标 我们希望为每个租户创建一个作业 以便我们可以并行处理租户 为了实现此目的 我想使用运行时参数来传递租户以更新到我的管道
  • OSX 中的 python 地穴

    我有一个 Django 应用程序 它可以重置 Ubuntu 机器上运行的 unix 用户密码 但我的开发环境是 OS X 我遇到了这种恼人的情况 OS X gt gt gt import crypt gt gt gt crypt crypt
  • C/C++:如何将数据存储在B树中的文件中

    在我看来 将数据作为文件存储在 B 树中的一种方法可以使用 C 语言使用具有结构序列 数组 的二进制文件来有效完成 每个结构代表一个节点 因此 我们可以使用类似于使用数组创建链表的方法来连接各个节点 但随之而来的问题是删除节点 因为在一个大
  • “RPC 服务器不可用。”循环遍历Word文档时

    我正在开发一个实用程序来查找和更新 Word 中的 DOC 变量 我有一段代码可以循环遍历文档并显示带有变量名称的消息框 但是当它尝试打开下一个文档时收到错误 错误是 System Runtime InteropServices COMEx