我的工作表包含一系列格式为使用vba制作的货币的单元格。我想循环遍历范围内的所有单元格并更改我正在尝试的代码的货币格式低于以下代码:
Dim c As Range
Dim rnge As Range
Dim c as Range
Set rnge = Range("CampusCurrRng")
For Each c In rnge
If Left(cell, 1) = "£" And cell.Value <> "" Then
Left(cell, 1) = "R" And cell.Value * 50
End If
Next
我一直收到错误1004对象'_worksheet'的方法'范围'失败。有什么想法为什么?以及如何解决它。
谢谢
答案 0 :(得分:1)
您需要检查单元格的NumberFormat
,Left
在此处不起作用。
见下面的代码
Dim rnge As Range
Dim cell As Range
Set rnge = Range("CampusCurrRng")
For Each cell In rnge
' in case you use pound in whatever format
If InStr(cell.NumberFormat, "£") > 0 And cell.Value <> "" Then
' used the Rand default of Excel, can modify this line according to your need
cell.NumberFormat = "[$R-430]#,##0.00"
cell.Value = cell.Value * 50
End If
Next
答案 1 :(得分:0)
如果您的值是货币格式,那么使用left
将无效 - 它会拉回第一个数字,而不是货币前缀。
此代码可以帮助您入门。它将£
转换为R
(南非兰特)。
Sub CurrencyConverter()
Dim cl As Range, rng As Range
Set rng = Range("CampusCurrRng")
For Each cl In rng
If cl.NumberFormatLocal = "£#,##0;[Red]-£#,##0" And cl.Value <> "" Then
cl = cl * 50
cl.NumberFormat = "[$R-1C09] #,##0;[Red][$R-1C09] -#,##0"
End If
Next
End Sub
备注:强>
要检查£
,您需要指定货币格式。这很棘手。例如,我在英国,如果我在单元格A1中有100英镑:
Range("A1").NumberFormat ~~~> $#,##0_);[Red]($#,##0)
Range("A1").NumberFormatLocal ~~~> £#,##0;[Red]-£#,##0
您需要使用NumberFormatLocal
来接听£
。换句话说,此代码将在循环中产生否定结果:
If cl.NumberFormat = "£#,##0;[Red]-£#,##0"...
下一点更容易。您需要指定输出货币格式。对于南非兰特,我有:
cl.NumberFormat = "[$R-1C09] #,##0;[Red][$R-1C09] -#,##0"
要获得你需要的那个我会做以下事情:
F1
(调出单元格格式对话框)Currency
Symbol
下拉菜单OK
F1
Custom
这一切看起来有点像辛勤工作。我很想知道是否有更简单的方法表面!
答案 2 :(得分:-1)
我没有对此进行过测试,但请尝试Dim c as variant
。或者,如果未将选项设置为显式,则可以完全省略它,因为尚未声明的任何变量将自动dim_ed作为变体类型。
此外,除非您的命名范围是工作簿范围,否则我建议您添加其工作表规范以确保所有内容都以可预测的方式运行。
e.g。
Set rnge = Worksheets("example").Range("CampusCurrRng")
最后,就像M Lind所说的那样,它应该是c而不是cell(在第一遍时错过了)。