由 VBA 关闭的工作簿未关闭引用的 IsAddin 工作簿

2024-04-18

Version

Excel 2016 桌面版

Context

VBA 项目(“客户端”.xlsb)具有对另一个工作簿的引用(“工具”菜单 >“引用”)。参考书目isn't一个插件,它是一个普通的 .xlsb 文件。

这会导致如果客户书籍仍处于打开状态,则无法关闭引用的书籍:

"This workbook is currently referenced by another workbook and cannot be closed."

我渴望这种行为。

Problem

如果使用 VBA 关闭客户簿ThisWorkbook.Close,那么引用的书籍将保留在内存中——它不会像手动关闭客户端时那样自动关闭。

当用VBA关闭客户端书籍时,如何使引用的书籍自动关闭?理想情况下,即使其他工作簿打开,该解决方案也会关闭引用的书籍。

我无法使用需要以编程方式从客户端删除引用的解决方案,因为我无法保证用户在宏安全性中具有对 VBA 的可信访问权限。

假设不止一本打开的书可能引用参考书,因此在最后一个客户端关闭之前不应关闭引用。

尝试的解决方案

  • 关闭后事件:当没有其他客户端打开时,让参考书自行关闭。这里的挑战是,在所有客户端都关闭之前,引用的文件无法关闭。这意味着,我们必须等待 Workbook_AfterClose 事件——不幸的是,不存在这样的 Workbook_AfterClose 事件。我尝试通过拦截 Application_WorkbookDeactivate 和 Application_WorkbookActivate 事件(客户端外部)来滚动我自己的 Workbook_AfterClose 事件。到目前为止还没有运气。

  • OnTime:最后一个客户端关闭后 5 秒,使用 OnTime 事件模拟 AfterClose 事件。但是,如果 OnTime 事件在由 VBA 使用 ClientWorkbook.Close 启动的 Workbook_Close 事件中注册,则似乎不会触发 OnTime 事件。

  • 模拟鼠标:在客户端簿的 Workbook_Close 事件中,模拟鼠标单击客户端簿的前端关闭按钮。但操纵鼠标似乎通常是个坏主意。此外,如果其他不相关的书籍打开,这也不会关闭参考书。

  • 删除参考:在关闭客户端之前以编程方式删除引用。但这需要对 VBA 的可信访问,而我没有。


这就是你所面临的

这就是你正在尝试的吗?

Option Explicit

'~~> This is the name of the VBA project from the referenced workbook
Private Const ReferenceWbModule As String = "MyVBAProject"
Private Const ReferenceWb As String = "Test.xlsb"

Sub Sample()       
    '~~> Save the workbook (IMPORTANT)
    ThisWorkbook.Save
    
    '~~> Remove the reference
    Dim RefName As String: RefName = ReferenceWbModule
    Dim oRefS As Object, oRef As Object
    Set oRefS = ThisWorkbook.VBProject.References
    For Each oRef In oRefS
        If oRef.Name = RefName Then
            oRefS.Remove oRef
            Exit For
        End If
    Next
    
    '~~> Close the workbook
    Dim wb As Workbook
    Set wb = Workbooks(ReferenceWb)
    wb.Close (False)
    
    '~~> Close without saving so that next time the reference is still there
    ThisWorkbook.Close (False)
End Sub

这就是现在发生的事情

NOTE

你必须给予以编程方式访问 Office VBA 项目 https://support.microsoft.com/en-us/topic/programmatic-access-to-office-vba-project-is-denied-960d5265-6592-9400-31bc-b2ddfb94b445

否则,当您运行代码时,您将收到以下错误。

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

由 VBA 关闭的工作簿未关闭引用的 IsAddin 工作簿 的相关文章

  • 在 VBA 中按键对字典进行排序

    我使用 VBA 创建了一个字典CreateObject Scripting Dictionary 将源单词映射到要在某些文本中替换的目标单词 这实际上是为了混淆 不幸的是 当我按照下面的代码进行实际替换时 它将按照源单词添加到字典中的顺序替
  • 将表行从 Word 文档复制到现有文档表特定单元格

    我正在寻找一个宏 它将内容从一个 Word 文档中的表格复制到另一个现有 Word 文档中的表格到特定单元格中 从第 5 行开始 复制后面的所有行并将其粘贴到现有文档中的第 5 行 这可能吗 在此输入图像描述 https i stack i
  • 如何在未安装 Office 的情况下以编程方式创建、读取、写入 Excel?

    我对所有读取 写入 创建 Excel 文件的方法感到非常困惑 VSTO OLEDB 等 但它们都seem具有必须安装office的要求 这是我的情况 我需要开发一个应用程序 它将以 Excel 文件作为输入 进行一些计算并创建一个新的 Ex
  • 如何在不滚动的情况下截取整个电子邮件正文?

    我正在使用 OL2010 想要制作整个电子邮件的屏幕截图 不仅仅是 屏幕 可以用VBA或者外部程序来完成吗 有一个类似的问题 https stackoverflow com questions 4176340关于如何使用 C 实现这一点 注
  • Excel VBA 过滤和复制粘贴数据

    给定一个数据集 假设有 10 列 在 A 列中我有日期 在 B 列中我有 我想仅过滤 A 列 2014 年的数据 B 列 ActiveSheet Range A 1 AR 1617 AutoFilter Field 5 Operator x
  • 在 VBA 中循环合并单元格

    是否可以循环遍历合并的单元格vba questions tagged vba 我的范围内有 6 个合并单元格B4 B40 我只需要这 6 个单元格中的值 6 次迭代 上面的答案看起来已经让你排序了 如果您不知道合并的单元格在哪里 那么您可以
  • Word通过vba宏删除tabe列出现错误

    我想将excel中的数据复制到word表中 然后从表中删除一些列 我可以将数据复制到表中 但是当我删除列时会出现错误 无法访问此集合中的各个列 因为该表具有混合的单元格宽度 我的代码 Public Tbl1 As Table Sub cal
  • 如何在 Azure 逻辑应用中解析 Excel 电子表格

    我需要使用 Azure 逻辑应用从 Excel 电子表格中解析和提取列信息 我已经为我的逻辑应用程序设置了从 Outlook 检索最新未读电子邮件的功能 此外 我的逻辑应用程序执行 FOR EACH 来读取所有附件 来自未读电子邮件 并确保
  • MS Access - 粘贴确认事件后

    当用户将记录直接粘贴到数据表子报表中时 是否可以在显示粘贴确认消息后捕获事件 我需要它能够在审计表中创建新记录时进行记录 通过捕获更新前 更新后和插入事件 我可以轻松创建已添加的记录集合 准备将详细信息插入审核日志 但是在所有这些事件触发后
  • 我可以用文本框设置变量名称吗? excel

    我可以使用 TextBox Vba Excel 设置变量的名称吗 我必须以在文本框中写入组名称并单击命令按钮的方式输入新的产品组 代码必须从文本框中获取字符串 并将该字符串设置为新创建的数组的名称 我只想在运行时创建一个新变量 或数组 据信
  • 在Google电子表格中划分整列

    我是 Google 电子表格的一个相对较新的用户 我希望 B 列中的每个单元格都是 A 列 同一行 中内容除以 5 的结果 B1 B2 B3 等 商 应为 A1 A2 A3 等 被除数 除以 5 除数 在示例中 B1 A1 5 我知道一项一
  • VBA 字符串 255 个字符限制

    我在使用 VBA 时遇到问题 并注意到它的字符串限制为 255 个字符 我实际上正在尝试通过 POST 发送 JSON 并暂停执行 我注意到该字符串始终只有 255 个字符 有没有办法调整字符串的大小或其他什么 我在这个问题上浪费了大约 6
  • 在组合框中显示可见工作表

    您好 我有以下代码来在组合框中显示工作表 创建工作表后 工作表会自动添加到列表中 我不希望隐藏的工作表在保管箱中可见 我怎么做 Option Explicit Private Sub ComboBox1 Change If ComboBox
  • 在 VBA Excel 中查找、剪切和插入行以匹配借项和贷项值

    我在 Sheet1 中有以下设置数据 并从第 4 行 A 列开始 其中标题位于第 3 行 No Date Code Name Remarks D e b i t Cr e d i t 1 4 30 2015 004 AB 01 04 15
  • 将html表格保存到excel中[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我必须编写一个程序 定期读取网页并将
  • 在 Node.js 中解析 Json(带有数组和对象)并将数据导出到 Excel 文件中

    我是 Node js 新手 我的要求是 我需要解析 JSON 并将数据导出到 Excel 文件中 其中包含 JSON 中的所有字段 我的 JSON 如下 id 1255 title The Brain and Nervous System
  • 如何将 MySQL 查询输出保存到 Excel 或 .txt 文件? [复制]

    这个问题在这里已经有答案了 如何将 MySQL 查询的输出保存到 MS Excel 工作表 即使只能将数据存储在 txt文件 就可以了 From 将 MySQL 查询结果保存到文本或 CSV 文件中 http www tech recipe
  • 所以,我有 6 个“主”文件,然后分为 40 个单独的文件

    我将简要描述我想要的内容 我有 6 个 主 文件 每个文件包含 40 个工作表 如下所示 AG 工作簿有 HR Gp 1 到 HR Gp 40 ER 工作簿有 FB Gp 1 到 Gp 40 等 所有工作表都已 平坦 我已经成功创建了一个适
  • 将 Excel 范围转换为 VBA 字符串

    我想将给定范围内的值转换为 VBA 字符串 其中原始单元格值由任何选定的列分隔符和行分隔符分隔 分隔符可以是一个字符或更长的字符串 行分隔符是行末尾的字符串 该字符串应该像我们从左上角 从左到右 到右下角读取文本一样完成 以下是范围 A1
  • Excel:#CALC!使用 MAP 函数计算间隔重叠时出现错误(嵌套数组)

    我正在努力解决以下公式 它适用于某些情况 但不适用于所有情况 名字input有失败的数据集 得到一个 CALC 描述 嵌套数组 错误 LET input N1 0 0 N1 0 10 N1 10 20 names INDEX input 1

随机推荐

  • 如何从年、月、日获取日期对象?

    当我使用以下代码时 Date对象错误 Date date new Date day getYear day getMonth day getDay 谁能告诉我如何从年 月 日的值中获取日期对象 您可以使用Calendar类来实现这一点 pu
  • 宏 $(VCTargetsPath) 到底在哪里定义的?

    我们之前有过讨论 https social msdn microsoft com Forums vstudio en US e04e7791 c0c4 4598 b900 310878f5af45 how can i locate and
  • 我们可以更新 Amazon S3 中特定文件的内容吗?

    我正在使用AWS PHP SDK 我将 JSON 文件上传到 S3 存储桶 现在我想获取文件内容 上传到S3存储桶 向抓取的文件内容添加一些附加文本并通过 S3 存储桶更新该文件 我想要的是这样的 文件名 userlist json 使用
  • wagtail 中的嵌套类别/InlinePanel

    我很难实现 嵌套类别 之类的东西 PageA Cat1 SubCat1 SubCat2 Cat2 SubCat1 所有类别和子类别都应可由编辑排序和编辑 我的猜测是这样的 class CategoryTestPage Page conten
  • lucene:如何添加不重复的文档

    就我而言 插入 lucene 索引的每个文档都有其唯一的 ID 当向lucene索引添加新文档时 如果该文档已经存在于索引中 则不应将该文档插入到索引中 如何实施这一战略 我想我应该先用docId搜索文档 如果lucene找不到该文档 那么
  • 如何在 Android 上对 XML 进行编码?

    我需要将 XML 文档编码为一种格式 该格式将作为字符串 即条带标签 通过 XML 解析器 然后我需要再次解码它 并且我需要在 Android 上执行此操作 我正在寻找的 Android API 中的库 类是什么 Thanks XmlSer
  • 运行我的应用程序时,Java 运行时环境检测到致命错误

    我在运行程序时遇到以下错误 并且无法弄清楚解决方案是什么我还查看了具有类似错误的所有主题 但无法解决我的问题 这里的错误 我的应用程序是基于 Groovy 和 Grails 版本 2 0 4 构建的 A fatal error has be
  • 使用 bash 通过 ssh 启动进程,然后在 sigint 上终止它

    我想使用 ssh 在不同的机器上启动几个作业 如果用户随后中断主脚本 我想优雅地关闭所有作业 这是我正在尝试做的事情的一个简短示例 bin bash trap aborted SIGINT SIGTERM aborted kill SIGT
  • 每个键的填充数据帧和累积度量 Pandas

    我有以下数据框 import pandas as pd before padding pd DataFrame data user id 1 1 1 1 2 2 3 days past 1 2 3 4 2 3 2 pay 11 12 13
  • tesseract (v3.03) 输出为 PDF [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 为什么会返回这个错误呢 root amd 3700 2gb ocr test tesseract l dan pdf png out pd
  • 无法加载动态库'C:\php\ext\php_pthreads.dll'

    我试图在我的 php 代码中添加线程 但我无法理解pthreads库 每次运行程序时都会遇到此错误 Warning PHP Startup Unable to load dynamic library C php ext php pthre
  • 通过多种方法进行 Spring JPA 事务

    我在 Tomcat 7 中运行的 Web 应用程序中使用带有 JPA 和 Hibernate 4 的 Spring 3 2 该应用程序分为控制器 服务和 DAO 类 服务类在类和方法级别具有带注释的事务配置 DAO 是普通的 JPA 带有通
  • Java 堆被无法访问的对象淹没

    我们的 Java EE 应用程序开始出现一些严重问题 具体来说 应用程序在启动后几分钟内就运行了高达 99 的老年代堆 不会抛出 OOM 但实际上 JVM 没有响应 jstat 显示老年代的大小根本没有减少 没有垃圾收集正在进行 并且kil
  • 防止 TWIG 删除变量前的空格

    我有这个用例 范围内的默认文本 将在整个页面中使用 使用 jQuery 将文本从 占位符 更改为 特定情况 Ie 在 html 中我想这样做 树枝 html 和 js block content set location span Some
  • MassTransit 是否支持基于 HTTP 传输的 MSMQ?

    HTTP 传输自 MSMQ 3 0 起就可用 但恐怕 MassTransit 不提供使用 HTTP 协议作为队列之间的传输协议的功能 关于这个有一个非常相似的问题here https stackoverflow com questions
  • 同时从多个应用程序访问网络摄像头

    问题背景 有两个不同的 Windows 应用程序正在尝试同时访问计算机上的网络摄像头 目前 只有一个应用程序能够访问它 我希望能够允许两个应用程序同时访问网络摄像头 我的问题的一个常见示例是 Skype 和 yahoo Messenger
  • 浏览器对 SVG SMIL(动画)的支持级别

    有谁知道流行浏览器中 SVG SMIL 动画支持的当前状态 看起来 Safari Chrome 和 Opera 都支持它 Firefox 在其开发页面中有关于已添加 SMIL 支持的令人困惑的报告 但我在 v3 6 中没有看到它 https
  • Java Comparator.comparing 不比较?

    下列的这个问题 https stackoverflow com questions 18129807 in java how do you sort one list based on another关于按另一个列表对列表进行排序 我尝试做
  • 删除列表内数据框中的列

    我根据 A 列中的因子水平 从数据框中创建了一个列表 在列表中 我想删除该列 我的脑子里在说 lapply 但没有别的意思 P A ID Test A 1 A 1 B ID Test B 1 B 3 B 5 进入这个 A Test 1 1
  • 由 VBA 关闭的工作簿未关闭引用的 IsAddin 工作簿

    Version Excel 2016 桌面版 Context VBA 项目 客户端 xlsb 具有对另一个工作簿的引用 工具 菜单 gt 引用 参考书目isn t一个插件 它是一个普通的 xlsb 文件 这会导致如果客户书籍仍处于打开状态