Excel VBA函数在完成之前停止执行,但不显示错误消息
我开始编写一个简单的函数来确定字符串的长度(以点为单位)。在谷歌搜索过之后,我决定让excel为我做这项工作,以避免字体度量问题 这是代码Excel VBA函数在完成之前停止执行,但不显示错误消息,excel,vba,Excel,Vba,我开始编写一个简单的函数来确定字符串的长度(以点为单位)。在谷歌搜索过之后,我决定让excel为我做这项工作,以避免字体度量问题 这是代码 Option Explicit Function txtWidthPts(MyText As String) As Integer 'A cell on a working worksheet has been named "WidthTest" for easy reference & to ensure data is not o
Option Explicit
Function txtWidthPts(MyText As String) As Integer
'A cell on a working worksheet has been named "WidthTest" for easy reference & to ensure data is not overwritten.
'set WidthTest word wrapping off so that strings placed in there aren't wrapped
Application.ScreenUpdating = False
With [WidthTest]
.WrapText = False
.Value = MyText
'autofit WidthTest
.Columns.AutoFit
'get the width of the column
txtWidthPts = .Width
.ClearContents
End With
End Function
我通过将函数放置在工作表的单元格中来测试该函数,因此:
=txtWidthPts(“Test123”)
当我有这个工作,我将在代码中使用它,而不是作为一个工作表函数
我的问题是,函数不会抛出错误并停止行上的执行:
.Value = MyText
我已将代码和名称放入空工作簿中,以确保与其他工作簿内容/代码没有交互。
我已经广泛搜索并尝试了各种建议(DoEvents、Application.Update=False等),但没有结果。
我已清除所有断点,关闭并打开工作簿并重新启动。我已经测试了设置为在所有错误时中断的选项。
没有结果
我怀疑我错过了一些明显的东西,但这让我现在很沮丧
欢迎提出任何建议。因此,@YowE3K在金钱上是正确的。在修复了原始代码中的错误(上面更正的代码)后,这在vba中运行良好。我知道我错过了一些明显的东西 好奇子问题:该函数按预期工作,而且正如@YowE3K所观察到的,它不会修改Excel环境。但是,返回的结果取决于它是否已修改Excel环境。说真的,WTF。只是想了解
再次感谢YoWE3K。您无法使用自定义项修改Excel环境,因此您需要从VBA测试此函数。只需从即时窗口运行它,例如,
?txtwidhtpts(“Test123”)
。或者有一个伪子例程,例如Sub Test()
Debug.Print txtwidhtpts(“Test123”)
End Sub
。当从VBA而不是UDF调用该函数时,它能够修改环境,并且不会修改。但当作为UDF调用时,它将在.Value=MyText
行崩溃(UDF中的崩溃会立即退出并返回#Value
错误)。我还没有弄清楚为什么UDF会忽略诸如.WrapText=False
之类的语句,但会在诸如.Value=MyText
之类的语句上崩溃。感谢您的进一步解释。我的好奇子问题不太正确。从vba运行时,UDF会修改环境。