运行-时间错误“13”:清除单元格内容时类型不匹配
Run-time Error '13': Type Mismatch when I clear cell contents
我是 VBA 的新手,但到目前为止,我已经能够自己完成我需要的一切。但是,我似乎无法解决这个问题。从技术上讲,我有 2 个不同的私人潜艇 (Worksheet_Change),但只有将它们组合起来才能让它们工作。第一个将 B 列中具有相同内容的单元格的数量限制为 3.
如果 H = 100,第二个清除范围 G:I,并复制范围 A:F。"Macro1" 给我这个 运行 时间错误(运行-time Error '13': Type Mismatch) 当我出于某种原因清除内容时。很明显,"Macro2"是在清除内容,所以我真的在和自己作对。
Private Sub Worksheet_Change(ByVal Target As Range)
'First Macro. (The issue is in this Macro)
If WorksheetFunction.CountIf(Range("B4:B350"), Target) > 3 Then
msgbox "This team member has the maximum number of open projects.", vbCritical, "Overburdened"
Target.Value = ""
Target.Select
End If
'Second Macro
Dim rngStart As Range
Set rngStart = ActiveCell
A = Worksheets("Project Tracking").Cells(Rows.Count, 1).End(xlUp).Row
For i = 4 To A
If Worksheets("Project Tracking").Cells(i, 8).Value = 100 Then
Worksheets("Project Tracking").Range(Cells(i, 7), Cells(i, 9)).ClearContents
Worksheets("Project Tracking").Range(Cells(i, 1), Cells(i, 6)).Copy
Worksheets("Completed Projects").Activate
B = Worksheets("Completed Projects").Cells(Rows.Count, 1).End(xlUp).Row
Worksheets("Completed Projects").Cells(B + 1, 1).Select
ActiveSheet.Paste
Worksheets("Project Tracking").Activate
Worksheets("Project Tracking").Range(Cells(i, 1), Cells(i, 6)).ClearContents
Call Reset_List
Call Macro3
End If
Next
Application.CutCopyMode = False
ThisWorkbook.Worksheets("Project Tracking").Cells(1, 1).Select
rngStart.Select
End Sub
你在这一行得到类型不匹配...
If WorksheetFunction.CountIf(Range("B4:B350"), Target) > 3 Then
...因为您正在调用 Target
的默认成员(即 .Value
),然后将其传递给 CountIf
。问题是因为你在 Worksheet_Change
事件处理程序中,所以 Target
不必是单个单元格 。如果它不是单个单元格,Target.Value
包含一个数组,如果您尝试将其传递给 CountIf
,则会抛出该数组。如果您只对单个单元格更改感兴趣,请在 Sub
:
的顶部放置一个保护子句
If Target.Cells.Count <> 1 Then Exit Sub
此外,如评论中所述,由于您正在更改单元格(尽管不清楚 sheet 这是在哪个单元格中),您应该在开始进行可能导致重新输入的更改之前禁用事件 - Application.EnableEvents = False
。完成后不要忘记重新启用它。
我是 VBA 的新手,但到目前为止,我已经能够自己完成我需要的一切。但是,我似乎无法解决这个问题。从技术上讲,我有 2 个不同的私人潜艇 (Worksheet_Change),但只有将它们组合起来才能让它们工作。第一个将 B 列中具有相同内容的单元格的数量限制为 3.
如果 H = 100,第二个清除范围 G:I,并复制范围 A:F。"Macro1" 给我这个 运行 时间错误(运行-time Error '13': Type Mismatch) 当我出于某种原因清除内容时。很明显,"Macro2"是在清除内容,所以我真的在和自己作对。
Private Sub Worksheet_Change(ByVal Target As Range)
'First Macro. (The issue is in this Macro)
If WorksheetFunction.CountIf(Range("B4:B350"), Target) > 3 Then
msgbox "This team member has the maximum number of open projects.", vbCritical, "Overburdened"
Target.Value = ""
Target.Select
End If
'Second Macro
Dim rngStart As Range
Set rngStart = ActiveCell
A = Worksheets("Project Tracking").Cells(Rows.Count, 1).End(xlUp).Row
For i = 4 To A
If Worksheets("Project Tracking").Cells(i, 8).Value = 100 Then
Worksheets("Project Tracking").Range(Cells(i, 7), Cells(i, 9)).ClearContents
Worksheets("Project Tracking").Range(Cells(i, 1), Cells(i, 6)).Copy
Worksheets("Completed Projects").Activate
B = Worksheets("Completed Projects").Cells(Rows.Count, 1).End(xlUp).Row
Worksheets("Completed Projects").Cells(B + 1, 1).Select
ActiveSheet.Paste
Worksheets("Project Tracking").Activate
Worksheets("Project Tracking").Range(Cells(i, 1), Cells(i, 6)).ClearContents
Call Reset_List
Call Macro3
End If
Next
Application.CutCopyMode = False
ThisWorkbook.Worksheets("Project Tracking").Cells(1, 1).Select
rngStart.Select
End Sub
你在这一行得到类型不匹配...
If WorksheetFunction.CountIf(Range("B4:B350"), Target) > 3 Then
...因为您正在调用 Target
的默认成员(即 .Value
),然后将其传递给 CountIf
。问题是因为你在 Worksheet_Change
事件处理程序中,所以 Target
不必是单个单元格 。如果它不是单个单元格,Target.Value
包含一个数组,如果您尝试将其传递给 CountIf
,则会抛出该数组。如果您只对单个单元格更改感兴趣,请在 Sub
:
If Target.Cells.Count <> 1 Then Exit Sub
此外,如评论中所述,由于您正在更改单元格(尽管不清楚 sheet 这是在哪个单元格中),您应该在开始进行可能导致重新输入的更改之前禁用事件 - Application.EnableEvents = False
。完成后不要忘记重新启用它。