UserForm中的自定义数字格式

问题描述 投票:0回答:1

我在用户表单中有一个文本框,用户可以在其中输入单位(例如“ kg”)。我正在尝试使用此单位设置单元格的格式(在单元格中的值之后添加单位)

Sub Custom_unit()

Dim Cust_un As String

Cust_un = IM_Form1.TextBox1.Value
Selection.NumberFormat = "0" & Cust_un

End Sub

这是我的尝试,但是当我尝试运行它时,出现运行时错误'1004':无法设置Range类的NumberFormat属性。

excel vba userform number-formatting
1个回答
0
投票

如何在NumberFormat中添加引号

给出文本框的输入后,您将得到一个字符串值,例如“公斤”。为了将其用作NumberFormat后缀您需要用引号将单位字符串引起来。

您可以通过分配]来做到这一点

Selection.NumberFormat = "0" & """" & Cust_un & """"

或替代地

Selection.NumberFormat = "0" & Chr(34) & Cust_un & Chr(34)

请注意,VBA不能将单引号(")解释为字符串,也不要将单引号括在引号和结尾引号(""")中。您必须在周围的引号中包含一对引号,即""""以使其理解。替代方法使用Chr()功能返回一个字符串,该字符串包含与指定字符代码34关联的字符,即双引号字符。

您可能更喜欢使用帮助功能来返回正确的NumberFormat,例如

Function getNumberFormat(ByVal unit As String, Optional NumFmt As String = "0 ") As String
    unit = Replace(unit, Chr(34), vbNullString)         ' remove existing double quotes
    getNumberFormat = NumFmt & Chr(34) & unit & Chr(34) ' build NumberFormat including quotes around unit
    ' or: getNumberFormat = NumFmt & """" & unit & """"
End Function

示例通话

假设您的Custom_unit()过程位于UserForm代码模块中,请使用Me.TextBox1.Text引用当前的UserForm实例,而不是引用该用户窗体的默认实例。调用示例如下:

Sub Custom_unit()
    Selection.NumberFormat = getNumberFormat(Me.TextBox1.Text)
End Sub

顺便说一句:在大多数情况下,最好避免选择引用,参见How to avoid using Select in VBA?

© www.soinside.com 2019 - 2024. All rights reserved.