如何将自定义格式(货币)应用于基于组合框选择的文本框?

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 declarearrCuras aPrivatevariable on top of the form module (in the declarations area) and just using it in the comboChange` 事件的形式粘贴下一个代码:

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 新手,所以可能有一些我不理解的代码,但我明白了一般的想法。谢谢!

以上是关于如何将自定义格式(货币)应用于基于组合框选择的文本框?的主要内容,如果未能解决你的问题,请参考以下文章

uwp xaml - 将自定义输入格式设置为文本框

Spark scala Dataframe:如何将自定义类型应用于现有数据框?

将自定义列表与组合框等控件连接起来

单击提交按钮时将自定义文本从选择框提交到文本区域

AngularJS - 如何在我输入时在文本框上应用货币过滤器?

将自定义函数应用于 spark 数据框组