使用用户定义函数的 Excel 工作簿在关闭时始终会产生“保存”提示

使用用户定义函数的 Excel 工作簿在关闭时始终会产生“保存”提示

* 替换原始帖子。*

在遵循了该帖子中的建议以及我使用 Google 找到的一些其他建议后,
我意识到我在原始帖子中犯了一个错误。

睡了一夜好觉后,我决定重新开始。

我正在尝试创建一个 Excel VBA 函数来从字符串中删除尾随空格。这是我的函数代码。

Function TrimTrailing(Text As String) As String
   TrimTrailing = RTrim(Text)
End Function

我使用的是 Excel 2019,版本 2002(内部版本 12527.20278 即点即用)。
在每种情况下,工作簿计算选项都设置为自动。

步骤1

我创建了一个名为 的启用宏的工作簿DEMO00M.xlsm
其中包含 函数,重命名为TrimTrailing0
作为一个简单的测试,我在 工作表单元格中键入A B=TrimTrailing0(A1)和。 这按预期工作=LEN(A1)=LEN(B1)A1D1

第二步

我曾经DEMO00M.xlsm创建了一个名为 的加载项文件DEMO01A.xlam
其中包含重命名的函数TrimTrailing1
此文件存储在C:\Users\Tony\AppData\Roaming\Microsoft\AddIns文件夹中。
作为测试,我创建了一个名为 的标准工作簿DEMO01X.xlsx。我使用“文件 -> 选项 -> 加载项”来
激活新加载项。
作为一个简单的测试,我在工作表单元格中键入A B=TrimTrailing1(A1)和。 该函数按预期工作。但每当我关闭工作簿=LEN(A1)时 ,我都会收到提示“要将更改保存到?”,即使我没有做任何更改。=LEN(B1)A1D1
TrimTrailing1
DEMO01X.xlsx

根据建议,我将工作簿保存为名为 的启用宏的工作簿DEMO01M.xlsm。这并没有什么不同。

第三步

根据另一个建议,我创建了一个PERSONAL.XLSB包含该函数的工作簿(重命名为TrimTrailing2)。
此文件存储在C:\Users\Tony\AppData\Roaming\Microsoft\Excel\XLSTART文件夹中。
它是一个“隐藏”文件,每次启动 Excel 时都会打开它。
作为测试,我创建了一个名为的标准工作簿DEMO02X.xlsx。我使用“文件 -> 选项 -> 加载项”来
激活新加载项。
我在工作表单元格中键入A B=PERSONAL.XLSB!TrimTrailing2(A1)和。 该函数按预期工作,但我遇到了与=LEN(A1)以前相同的“关闭时保存”问题。=LEN(B1)A1D1
TrimTrailing2

我还将其另存DEMO02X.xlsx为名为 的启用宏的工作簿DEMO02M.xlsm。这没有任何区别。

第四步

另一种选择是将函数存储在启用宏的工作簿中,然后从其他工作簿访问它。这类似于使用PERSONAL.XLSB工作簿,但在我看来,不太方便。
我创建了DEMO03M.xlsm包含该函数的工作簿(重命名为TrimTrailing3)。
如果DEMO03M.xlsm打开,则可以使用类似这样的公式访问该函数=DEMO03M.xlsm!TrimTrailing3(A1)
TrimTrailing3函数按预期工作,但我遇到了与以前相同的“关闭时保存”问题。

第五步

我创建了一个DEMO01M-WO.xlsmDEMO01M.xlsm工作簿调用的工作簿。
我将此子例程添加到 ThisWorkbook 对象。

Private Sub Workbook_Open()
   ActiveWorkbook.Saved = True
End Sub

此操作在工作簿打开时运行,并重置工作簿的“脏”状态,这样在关闭之前就无需保存,除非随后进行了更改。当我第一次尝试这种方法时,由于某种原因,它没有起作用。我想我一定是犯了一个错误,因为它现在似乎运行得很好。“关闭时保存”问题已经避免了。

DEMO02M-WO.xlsm我针对此解决方案进行了更多测试。我创建了和DEMO02M.xlsm。这些工作簿运行正常,避免了“关闭时保存”问题。DEMO03M-WO.xlsmDEMO03M.xlsm

似乎当在单独的工作簿中声明用户定义函数时,它会被视为易失性函数。这可能是一个错误吗?

我对 VBA 的了解有点少,我是否对函数进行了错误的编码?

理想的情况是能够将函数存储在附加工作簿中,以便所有标准工作簿都可以以与内置函数相同的方式使用它们。

我使用另一台装有 Excel 2013 (15.0.5223.1001) 的 PC 进行了一些测试。它似乎存在同样的问题。

相关内容