如何在将文本转换为数字时绕过运行时错误1004

时间:2017-12-14 21:38:48

标签: excel vba

我是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

谢谢!

1 个答案:

答案 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