* 替换原始帖子。*
在遵循了该帖子中的建议以及我使用 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)
A1
D1
第二步
我曾经DEMO00M.xlsm
创建了一个名为 的加载项文件DEMO01A.xlam
。
其中包含重命名的函数TrimTrailing1
。
此文件存储在C:\Users\Tony\AppData\Roaming\Microsoft\AddIns
文件夹中。
作为测试,我创建了一个名为 的标准工作簿DEMO01X.xlsx
。我使用“文件 -> 选项 -> 加载项”来
激活新加载项。
作为一个简单的测试,我在工作表单元格中键入A B
、=TrimTrailing1(A1)
和。 该函数按预期工作。但每当我关闭工作簿=LEN(A1)
时 ,我都会收到提示“要将更改保存到?”,即使我没有做任何更改。=LEN(B1)
A1
D1
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)
A1
D1
TrimTrailing2
我还将其另存DEMO02X.xlsx
为名为 的启用宏的工作簿DEMO02M.xlsm
。这没有任何区别。
第四步
另一种选择是将函数存储在启用宏的工作簿中,然后从其他工作簿访问它。这类似于使用PERSONAL.XLSB
工作簿,但在我看来,不太方便。
我创建了DEMO03M.xlsm
包含该函数的工作簿(重命名为TrimTrailing3
)。
如果DEMO03M.xlsm
打开,则可以使用类似这样的公式访问该函数=DEMO03M.xlsm!TrimTrailing3(A1)
。
该TrimTrailing3
函数按预期工作,但我遇到了与以前相同的“关闭时保存”问题。
第五步
我创建了一个DEMO01M-WO.xlsm
从DEMO01M.xlsm
工作簿调用的工作簿。
我将此子例程添加到 ThisWorkbook 对象。
Private Sub Workbook_Open()
ActiveWorkbook.Saved = True
End Sub
此操作在工作簿打开时运行,并重置工作簿的“脏”状态,这样在关闭之前就无需保存,除非随后进行了更改。当我第一次尝试这种方法时,由于某种原因,它没有起作用。我想我一定是犯了一个错误,因为它现在似乎运行得很好。“关闭时保存”问题已经避免了。
DEMO02M-WO.xlsm
我针对此解决方案进行了更多测试。我创建了和DEMO02M.xlsm
。这些工作簿运行正常,避免了“关闭时保存”问题。DEMO03M-WO.xlsm
DEMO03M.xlsm
似乎当在单独的工作簿中声明用户定义函数时,它会被视为易失性函数。这可能是一个错误吗?
我对 VBA 的了解有点少,我是否对函数进行了错误的编码?
理想的情况是能够将函数存储在附加工作簿中,以便所有标准工作簿都可以以与内置函数相同的方式使用它们。
我使用另一台装有 Excel 2013 (15.0.5223.1001) 的 PC 进行了一些测试。它似乎存在同样的问题。