运行宏时类型不匹配错误,工作表具有特定代码

时间:2015-01-03 21:41:25

标签: excel vba excel-vba

我的程序:我有一个程序可以导入数据并将其拆分到同一工作簿中的不同工作表中。一旦数据被分割,目的是让最终用户能够进入这些表并更新数据。如果用户更新数据,则该特定单元格将更改颜色。因此,我专门为这些工作表创建了一个代码,以便在最终用户输入数据时自动更新。

我的问题:拆分宏可以完全独立工作,特定的表单代码可以完美地运行。但是,当我一起运行整个程序时 - vba会输入一个类型不匹配的错误。

这是特定的表格代码

 Private Sub Worksheet_Change(ByVal Target As Range)

    Application.EnableEvents = False

    Target.Select
    Range("E" & ActiveCell.Row).Select
    ActiveCell.Interior.ColorIndex = 24

    If Target.Value < 2000000 Then      'ERROR OCCURS HERE WHEN I CLICK MY SPLIT BUTTON
        If Target.Column = 16 Then
            Range("R" & Target.Row) = "Low"
        End If
    End If

    If Target.Value >= 2000000 And Target.Value < 10000000 Then
        If Target.Column = 16 Then
            Range("R" & Target.Row) = "Medium"
        End If
    End If

    If Target.Value >= 10000000 Then
        If Target.Column = 16 Then
            Range("R" & Target.Row) = "High"
        End If
    End If

    If Target.Value < 600000 Then
        If Target.Column = 17 Then
            Range("R" & Target.Row) = "Low"
        End If
    End If

    If Target.Value >= 600000 And Target.Value < 3000000 Then
        If Target.Column = 17 Then
            Range("R" & Target.Row) = "Medium"
        End If
    End If

    If Target.Value >= 3000000 Then
        If Target.Column = 17 Then
            Range("R" & Target.Row) = "High"
        End If
    End If

    Application.EnableEvents = True
End Sub

1 个答案:

答案 0 :(得分:0)

良好的编程习惯表明:如果某段代码重新至少重复两次,请将其移至单独的过程/函数中。

使用Excel VBA,除非必要,否则不要使用选择语句。

改进的程序可能如下:

Private Sub Worksheet_Change(ByVal Target As Range)

    Application.EnableEvents = False

    Range("E" & Target.Row).Interior.ColorIndex = 24
    Range("R" & Target.Row) = GetStatus(Target.Value)

    Application.EnableEvents = True
End Sub

Function GetStatus(ByVal curVal As Integer, ByVal iCol As Integer) As String
Dim sRetVal As String

Select Case iCol
    Case 16
        Select Case curVal
            Case Is < 2000000
                sRetVal = "Low"
            Case 2000000 To 10000000
                sRetVal = "Medium"
            Case Is >= 10000000
                sRetVal = "High"
        End Select
    Case 17
        Select Case curVal
            Case Is < 600000
                sRetVal = "Low"

            Case 600000 To 299999.9999
                    sRetVal = "Medium"

            Case Is >= 3000000
                sRetVal = "High"
        End Select
End Select

End Function

但是,为什么要强行打开门?使用conditional formatting

干杯,
马切伊