如何将自定义格式(货币)应用于基于组合框选择的文本框?
Posted
技术标签:
【中文标题】如何将自定义格式(货币)应用于基于组合框选择的文本框?【英文标题】:How to apply custom format (currency) to a textbox based in a combobox selection? 【发布时间】:2021-10-06 06:57:21 【问题描述】:我有一个包含不同货币项目的组合框:“PEN、USD 等” 我有一个文本框,我需要它根据组合框的选择来拥有相应的货币符号。
不是解决方案:
如果我使用:
TextBox1.Value = Format(TextBox1.Value, "$#,##0.00")
它显示了美元符号。
TextBox1.Value = Format(TextBox1.Value, "[$S/-es-PE] #,##0.00")
它不显示 S/ 符号(对应于 PEN)我在自定义表单中的单元格格式时复制了这种格式。
TextBox1.Value = Format(TextBox1.Value, "currency")
显示区域配置货币符号。
我不想更改我的区域设置,因为这不能解决问题。我希望能够根据选择的货币显示不同的符号。
谢谢!
【问题讨论】:
如何加载组合?从具有必要格式的范围? 来自表。组合框不需要有格式。因为只是货币的名称。 那么,您是否有组合“USD”并且需要“$”、“PEN”并且需要“P”?这是你想要的吗?如果是这样,是否存在需要在字符串末尾具有特定符号的货币?NumberFormat
的单元格与 VBA Format
函数返回的单元格不同...
在组合中如果我选择“USD”,如果我在文本框中输入值 10,我应该会看到 $10.00。那没问题。问题在于其他货币。例如,对于“PEN”,我希望阅读 S/.10.00。这适用于任何其他货币。我不想要异国符号,我只想要当您将自定义格式应用于工作表中的单元格时 Excel 已有的符号。
如果您能够在组合显示的内容和数字前面的所需内容(如前缀)之间制作等价列表,我可以为您提供帮助。我的意思是 'USD - $'、'PEN - S/.'、'EURO - €' 等。否则,我不知道有什么方法可以自动等价。
【参考方案1】:
请尝试下一个方法。我试图创建一个函数来从文本中提取值。您可以使用它来对文本框值进行算术运算。有一个组合(“ComboBox1”)和一个文本框(“TextBox1”),请将以下代码粘贴到组合框Click
事件中:
Private Sub ComboBox1_Change()
Dim arrCur, arrEch, mtch
arrC = Split("USD,PEN,EURO", ",") 'the string representation from combo, separated by comma (not by ", ")
arrEch = Split("$,S/.,€ ", ",") 'the desired corresponding format string
If Me.ComboBox1.ListIndex <> -1 Then 'if a selection exists (in combo):
If Me.TextBox1.Value <> "" Then 'if text box is not empty:
mtch = Application.match(Me.ComboBox1.Value, arrC, 0)
Me.TextBox1.Value = arrEch(mtch - 1) & Format(numberPart(Me.TextBox1.Value), "#,##0.00")
End If
End If
End Sub
您可以根据需要在arrCur
数组中添加任意数量的货币,以逗号分隔。然后相应的符号作为后缀出现,在arrEch
数组中。
下一个功能是提取数字部分并在更改格式时消除所必需的。如果您需要将数字部分用于其他操作,也可以使用它:
Private Function numberPart(strVal As String) As Currency
Dim i As Long
For i = 1 To Len(strVal)
If IsNumeric(Mid(strVal, i, 1)) Then numberPart = CCur(Right(strVal, Len(strVal) - i + 1)): Exit Function
Next i
End Function
您可以使用相同的(第一个)数组来加载组合,以“Initializeevent. In such a case, it should be good to declare
arrCuras a
Privatevariable on top of the form module (in the declarations area) and just using it in the combo
Change` 事件的形式粘贴下一个代码:
Private Sub UserForm_Initialize()
Dim arrCur, El
arrC = Split("USD,PEN,EURO", ",")
For Each El In arrC
Me.ComboBox1.AddItem El
Next
End Sub
请测试一下并发送一些反馈。
【讨论】:
@Walter S. Escobedo 您没有抽出时间来测试上述解决方案吗?如果经过测试,它没有按您的需要工作吗? 它按预期工作。我是 VBA 新手,所以可能有一些我不理解的代码,但我明白了一般的想法。谢谢!以上是关于如何将自定义格式(货币)应用于基于组合框选择的文本框?的主要内容,如果未能解决你的问题,请参考以下文章
Spark scala Dataframe:如何将自定义类型应用于现有数据框?