Excel for M365中VBA调用StockHistory致XLSM无法保存求助
VBA调用StockHistory函数导致Excel工作簿损坏的解决方案
在测试从VBA中调用仅Microsoft 365版本Excel可用的StockHistory函数时,发现执行后Excel会提示工作簿已损坏,且无法再次保存该工作簿。移除所有其他代码后,确认是该函数调用导致Excel不稳定。
复现问题的代码
自定义函数代码
Public Function GetData(ticker As String) As String Dim data As Variant data = Application.WorksheetFunction.StockHistory(ticker, Date - 10, Date, 0, 0, 1) GetData = ticker End Function
测试方法
在Excel单元格中输入以下公式:
=GetData("MSFT")
环境信息
Excel for Microsoft 365 MSO - 版本2406 内部版本16.0.17726.20078 - 64位
可行解决方案
- 改用
Evaluate方法替代Application.WorksheetFunction调用StockHistory,避免UDF中直接调用引发的稳定性问题:Public Function GetData(ticker As String) As String Dim data As Variant data = Evaluate("StockHistory(""" & ticker & """, " & Date - 10 & ", " & Date & ", 0, 0, 1)") GetData = ticker End Function - 将自定义函数改为普通Sub过程,通过代码写入单元格内容,而非作为工作表公式调用:
Sub GetStockData(ticker As String, targetCell As Range) Dim data As Variant data = Application.WorksheetFunction.StockHistory(ticker, Date - 10, Date, 0, 0, 1) targetCell.Value = ticker End Sub - 手动检查Office更新:尽管当前是最新版本,仍可通过「文件>账户>更新选项>立即更新」检查是否有遗漏的补丁,修复潜在的函数调用Bug。
- 禁用第三方COM加载项:部分加载项可能与StockHistory的VBA调用冲突,通过「文件>选项>加载项>COM加载项>转到」禁用所有加载项后重新测试。
内容的提问来源于stack exchange,提问作者whatever
相关产品推荐
相关产品推荐

