使用xlwings与Personal.xlsb宏时打开工作簿出现引用无法关闭错误
解决PERSONAL.xlsb搭配xlwings打开新工作簿时的引用错误
问题概述
将PERSONAL.xlsb放在XLSTART文件夹中,实现所有打开的工作簿都能通过VBA宏调用xlwings的RunPython执行Python脚本,但每次打开新工作簿时都会弹出错误提示:此工作簿当前被其他工作簿引用,无法关闭。点击确定后工作簿可正常使用,宏也能运行,但错误提示影响使用体验。
环境与代码
- 通过
xlwings addin install安装xlwings加载项,手动在PERSONAL.xlsb的VBA项目中添加了xlwings引用(曾尝试重命名加载项为xlwings - referenced,无效果) - PERSONAL.xlsb中Module1的宏代码:
Sub btnInitialize() RunPython "import PyCert; PyCert.btnInitialize()" End Sub
已尝试的无效操作
- 重命名xlwings加载项以避免重复导入
- 取消并重新勾选加载项(原本未勾选任何加载项)
- 检查注册表寻找
OPEN1、OPEN2键,未找到 - 移除XLSTART中的xlwings加载项或取消VBA引用:错误消失,但
RunPython无法正常工作
解决方案
方案1:取消PERSONAL.xlsb中对xlwings的手动引用
xlwings加载项放在XLSTART文件夹时会自动加载,手动添加VBA引用会造成重复引用冲突,操作步骤:
- 打开
PERSONAL.xlsb,按Alt+F11打开VBA编辑器 - 点击菜单栏的工具 > 引用
- 在弹出的引用列表中找到xlwings相关的条目(无论名称是什么),取消勾选
- 保存
PERSONAL.xlsb,重启Excel测试
方案2:延迟PERSONAL.xlsb的初始化
如果方案1无效,可能是加载顺序导致的冲突,通过延迟PERSONAL.xlsb的加载来避免:
- 在VBA编辑器中找到
PERSONAL.xlsb的ThisWorkbook模块 - 插入以下代码:
Private Sub Workbook_Open() ' 延迟1秒执行初始化,等待xlwings加载项完全加载 Application.OnTime Now + TimeValue("00:00:01"), "DelayedInit" End Sub Sub DelayedInit() ' 若有需要初始化的操作可在此添加,无需求则留空 End Sub
- 保存并重启Excel测试
方案3:调整xlwings加载项的加载方式
不将xlwings加载项放在XLSTART,改为手动添加加载项:
- 移除XLSTART文件夹中的xlwings加载项文件
- 打开Excel,点击文件 > 选项 > 加载项
- 在“管理”下拉菜单中选择Excel加载项,点击转到
- 在弹出的窗口中点击浏览,找到xlwings加载项文件(通常路径为
%APPDATA%\Microsoft\AddIns\xlwings.xlsb)并添加 - 回到PERSONAL.xlsb的VBA编辑器,重新添加xlwings引用
- 保存并重启Excel测试
内容的提问来源于stack exchange,提问作者Bulky
相关产品推荐
相关产品推荐

