我是vba的新手,并且在运行此代码以将文本转换为数字时遇到了一些问题:
Dim rLastR As Range, rLastC As Range, rUsedRange As Range
Set rLastR = ActiveSheet.Cells.Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious)
Set rLastC = ActiveSheet.Cells.Find(What:="*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious)
Set rUsedRange = ActiveSheet.Range("B15", Cells(rLastR.Row, rLastC.Column))
For Each rUsedRange In Intersect(ActiveSheet.UsedRange, Selection).Areas
rUsedRange.Value = rUsedRange.Value -------> run-time error '1004': Application-defined or object-defined error*
Next rUsedRange
我想知道是否发生此错误,因为我尝试运行它的文件有太多的单元格格式。它在其他文件上运行良好。有没有办法优化这些代码,以便我可以绕过这个问题?
最终我要做的是将包含范围/ $ /%(存储为文本)的单元格转换为数字。我试过了
a)将numberformat更改为general,但由于单元格格式错误太多,excel无法更改numberformat;
b)使用以下代码,但它将我存储的文本数字全部转换为0
For Each r In WS.UsedRange.SpecialCells(xlCellTypeConstants)
If IsNumeric(r) Then r.Value = Val(r.Value)
Next
谢谢!
答案 0 :(得分:0)
忘记长代码,它不会做你想要的。后一个代码很好,它应该与下面的一些更好的开发一起工作。如果您不更改单元格的格式,则更改该值将不起作用。如果你有一个文本格式,如果你告诉Excel将空白转换为数字,它会将它转换为0,这就是为什么你全部都有零。
Sub ConvertTextToNumbers()
Dim rng As Range
Dim cell As Range
Dim WS As Worksheet
Set WS = ActiveSheet 'change as needed
On Error Resume Next
Set rng = UsedRange.SpecialCells(xlCellTypeConstants)
On Error GoTo 0
If Not rng Is Nothing Then
For Each cell In rng
If IsNumeric(cell.Value) Then
cell.NumberFormat = "General"
cell.Value = Val(cell.Value)
End If
Next cell
End If
End Sub