另一个运行时错误'13':类型不匹配

时间:2015-11-16 10:23:45

标签: excel excel-vba vba

我是Excel VBA的新手。 我根据工作表上特定单元格的输入触发了几个宏。

我对前两个选项没有任何问题。 但每次我使用第三个选项,即Delete Row,&每当我编辑一个单元格或删除一个单元格时,我都会遇到错误。

代码如下:

 Sub Worksheet_Change(ByVal Target As Range)
 Set Target = ActiveCell
 If Target.Value = "Fuel Supply" Then (<=Error At This Point)
      Fuel_Heating_Value
 ElseIf Target.Value = "Add Row" Then
      Insert_New_Row
 ElseIf Target.Value = "Delete Row" Then
      Delete_Row
 Else:
 End If
 End Sub

错误始终位于第一个选项语句中代码的第三行。

第三个选项代码如下:

 Sub Delete_Row()
 '
 ' Delete_Row Macro
 '
     Application.ScreenUpdating = False
     ActiveCell.Select
     ActiveCell.EntireRow.Select
     Selection.Delete Shift:=xlUp
     ActiveCell.Select
     ActiveCell.Offset(-1, 12).Select
     ActiveCell.Select
     Selection.Copy
     ActiveCell.Offset(1, 0).Select
     ActiveSheet.Paste
     Application.CutCopyMode = False
     ActiveCell.Offset(0, -11).Select
     Application.ScreenUpdating = True
  End Sub

任何有助于消除此问题的帮助都将受到赞赏。

感谢。

1 个答案:

答案 0 :(得分:0)

您正在从Worksheet_Change事件宏中删除行,复制和粘贴单元格等。您不应该在不禁用事件的情况下从Worksheet_Change修改您所在的工作表,否则您执行的操作将触发另一个事件,并且Worksheet_Change将尝试在其自身上运行。

此外,我不知道该怎么做Set Target = ActiveCell。触发Worksheet_Change时,它会传递一个或多个收到更改的单元格的地址。您的条件基于该目标。您不必将其设置为任何内容。但是,你应该防止有超过一个单元格作为目标;如果您尝试将一组单元格与单个文本字符串进行比较,则代码将引发错误。也许这就是错误发生的地方。您的条件都取决于Target是单个细胞。如果Target是多个单元格,我已经输出了退出代码,因为如果它是复数则继续是没有意义的。

Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub

    On Error GoTo bm_Safe_Exit
    Application.EnableEvents = False

    If Target.Value = "Fuel Supply" Then
        Fuel_Heating_Value
    ElseIf Target.Value = "Add Row" Then
        Insert_New_Row
    ElseIf Target.Value = "Delete Row" Then
        Delete_Row
    Else:
    End If

bm_Safe_Exit:
    Application.EnableEvents = True
End Sub

现在,如果Worksheet_Change导致工作表中发生任何变化,则不会在第一个事件上运行另一个事件。

Delete_Row例程也可以改进,但它有助于叙述它想要完成什么。选择的单元格已经被选中,ActiveCell property被抛出相当多。

有关远离依赖选择和激活以实现目标的更多方法,请参阅How to avoid using Select in Excel VBA macros