文字列の長さをポイント単位で判断する簡単な関数を記述しました。グーグルで検索したところ、フォントメトリクスの問題を避けることを決めました。Excel VBA関数はエラーメッセージなしで完了前に実行を停止します
ここにコードがあります。
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など)を試してみました。 すべてのブレークポイントをクリアして、ワークブック&を再起動して閉じました。 Break on All Errorsに設定されたオプションでテストしました。 結果はありません。
私は何かが分かりにくいと思っていますが、それは私が今拍手しています。
すべてのご提案をお待ちしております。
UDFを使用してExcel環境を変更することはできないため、代わりにこの機能をVBAからテストする必要があります。たとえば、 '?txtWidthPts(" Test123 ")'のようにイミディエイトウィンドウから実行するだけです。あるいは 'Sub Test()' 'Debug.Print txtWidthPts(" Test123 ")' 'End Sub'のようなダミーサブルーチンを持っています。 – YowE3K