Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA函数在完成之前停止执行,但不显示错误消息_Excel_Vba - Fatal编程技术网

Excel VBA函数在完成之前停止执行,但不显示错误消息

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

我开始编写一个简单的函数来确定字符串的长度(以点为单位)。在谷歌搜索过之后,我决定让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 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会修改环境。