Excel VBA代码在调试模式下工作,或者在重新输入数据后工作

时间:2016-05-20 22:03:06

标签: excel vba excel-vba

此代码以前有效,我更改了一些字符串并且它已经开始出现故障。大约在脚本的一半时,它将开始分配" N / A"大约10行,然后再次分配数字。例如," O" + i返回" 1级"并改为" N / A"如果其他受影响的列发生了变化,并且如果它注册了一个"等级0",它将放置" 1"进一步向下,在大约20个偏移放置实例后,代码返回工作状态。如果我重新输入列O并再次运行它,代码就能正常运行。我很乐意提供任何帮助。

PS,我不是编码员所以我知道它有点乱。

Sub Fix_Haz_Rec()


Dim lastRow3 As Integer 'last row of sheet 3
Sheets(3).Activate
lastRow3 = Cells(Rows.Count, 1).End(xlUp).Row

For i = 4 To lastRow3

ActiveSheet.Range("D" & i).Value = Math.Round(ActiveSheet.Range("D" & i).Value, 3)
ActiveSheet.Range("E" & i).Value = Math.Round(ActiveSheet.Range("E" & i).Value, 3)
ActiveSheet.Range("F" & i).Value = Math.Round(ActiveSheet.Range("F" & i).Value, 3)
ActiveSheet.Range("G" & i).Value = Math.Round(ActiveSheet.Range("G" & i).Value, 3)
ActiveSheet.Range("I" & i).Value = Math.Round(ActiveSheet.Range("I" & i).Value, 2)
ActiveSheet.Range("J" & i).Value = Math.Round(ActiveSheet.Range("J" & i).Value, 3)
ActiveSheet.Range("K" & i).Value = Math.Round(ActiveSheet.Range("K" & i).Value, 3)
ActiveSheet.Range("L" & i).Value = Math.Round(ActiveSheet.Range("L" & i).Value, 3)
If ActiveSheet.Range("M" & i).Value = "N/A" Or ActiveSheet.Range("M" & i).Value = "#N/A" Then
Else

   If ActiveSheet.Range("O" & i) = "Level 4" Then
        ActiveSheet.Range("O" & i) = 4
    Else
        If ActiveSheet.Range("O" & i) = "Level 3" Then
            ActiveSheet.Range("O" & i) = 3
        Else
            If ActiveSheet.Range("O" & i) = "Level 2" Then
                ActiveSheet.Range("O" & i) = 2
            Else
                If ActiveSheet.Range("O" & i) = "Level 1" Then
                    ActiveSheet.Range("O" & i) = 1
                Else
                    If ActiveSheet.Range("O" & i) = "Level 0" Then
                        ActiveSheet.Range("L" & i) = ActiveSheet.Range("N" & i).Value / 12
                        ActiveSheet.Range("O" & i) = "N/A"
                    Else
                        If ActiveSheet.Range("O" & i) = ">Max." Then
                            ActiveSheet.Range("O" & i) = "> Max"
                        End If
                    End If
                End If
            End If
        End If
    End If
Next i


Sheets("Recommended").Activate
ActiveSheet.Range("A4:P" & lastRow3).Select
Selection.Sort Key1:=Range("A3"), Order1:=xlAscending, Header:=xlYes
ActiveSheet.Range("D4:M" & lastRow3).Select
Selection.NumberFormat = "0.00"

End Sub

1 个答案:

答案 0 :(得分:0)

给它一个去 - 它应该有很长的路要走,帮助你实现你所追求的目标。

首先对值替换进行排序,然后进行清理 - 即继续尝试查找" 0级"并执行L / N操作,直到您无法再找到该值。

    With ActiveSheet.Range("O4:O" & lastRow3)
        .Replace "Level 4", 4, xlWhole
        .Replace "Level 3", 3, xlWhole
        .Replace "Level 2", 2, xlWhole
        .Replace "Level 1", 1, xlWhole
        .Replace ">Max.", "> Max", xlWhole

        Set rngLevel0 = .Find(What:="Level 0", LookAt:=xlWhole)
        Do While Not rngLevel0 Is Nothing
            ActiveSheet.Range("L" & rngLevel0.Row) = ActiveSheet.Range("N" & rngLevel0.Row).Value / 12
            rngLevel0.Value = "N/A"

            Set rngLevel0 = .Find(What:="Level 0", LookAt:=xlWhole)
        Loop

    End With
相关问题