【发布时间】:2014-08-13 12:48:06
【问题描述】:
我有许多单元格格式为货币的工作表,我想通过组合框修改货币格式,
首先我使用此代码获取初始货币类型/格式,
Private Sub ComboBox1_DropButtonClick()
inicial = Me.ComboBox1.Value
Select Case inicial
Case "EUR"
oldFormat = "#.##0 €"
Case "GBP"
oldFormat = "[$£-809]#.##0"
Case "USD"
oldFormat = "#.##0 [$USD]"
End Select
End Sub
oldformat 变量是全局变量,
Public oldformat As String
之后我想使用 oldformat 变量进行查找并使用 newformat 变量进行替换,
Private Sub ComboBox1_Change()
Dim ws As Worksheet
Dim newFormat As String
'On Error Resume Next
newValue = Me.ComboBox1.Value
Select Case newValue
Case "EUR"
newFormat = "#.##0 €"
Case "GBP"
newFormat = "[$£-809]#.##0"
Case "USD"
newFormat = "#.##0 [$USD]"
End Select
'Set rNextCell = Application.FindFormat
For Each ws In ActiveWorkbook.Worksheets
Application.FindFormat.Clear
Application.FindFormat.NumberFormat = oldFormat
Application.ReplaceFormat.Clear
Application.ReplaceFormat.NumberFormat = newFormat
ws.Cells.Replace What:="", Replacement:="", LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False, SearchFormat:=True, ReplaceFormat:=True
Next ws
End Sub
我通过组合框上的用户选择读取了新值。
但这根本不起作用,变量 oldformat 和 newformat 接收到正确的值但我得到了一个错误,
Application.FindFormat.NumberFormat = oldformat
Application.ReplaceFormat.NumberFormat = newFormat
运行时错误“1004”:应用程序定义或对象定义错误
有没有办法将 newformat 和 oldformat 值传递给 Numberformat 属性?
或者有人有另一个人来做这件事?
示例文件的链接, https://www.dropbox.com/s/sdyfbddxy08pvlc/Change_Currency.xlsm
感谢任何帮助,我对 VBA 有点陌生。
如果英文有任何错误,我很抱歉,这不是我的自然语言。
【问题讨论】:
-
我已经在自定义格式框中设置了格式,但仍然出现错误。您可以在示例文件中看到。
-
您的系统中设置了哪些十进制分隔符和数字组分隔符? VBA 将永远使用英文格式代码,因此如果十进制分隔符是逗号且数字组分隔符是点,“#.##0,00”将不正常工作。然后必须使用“#,##.00”,如果结果应该是 1.000,00。
-
这里是我的区域设置 dropbox.com/s/4u44a8l1snsqr6b/Regional.png 和 VBA 上的错误 dropbox.com/s/aysyyc1smcphslf/VBA.png 我将格式更改为 "#,##.0 €" "[$£-809]#,##.0 " 和 "#,##.0 [$USD]"。我将它们添加到自定义格式框中,dropbox.com/s/ad8vanm2hwtsudb/Formatbox.png
-
不,您不应该更改自定义格式框中的格式代码。您应该在 VBA 代码中使用英文代码。
标签: object currency number-formatting