Excel 运行时错误';13';:清除单元格内容时类型不匹配
我对VBA很陌生,但到目前为止,我已经能够完成我需要的所有工作。然而,我似乎无法解决这个问题。从技术上讲,我有两个不同的私人潜水艇(工作表_变化),但我只能让他们工作,如果我把他们结合起来。第一种方法将B列中具有相同内容的单元格数量限制为3 第二个清除范围G:I,如果H=100,则复制范围A:F。当我出于某种原因清除内容时,“Macro1”会给我这个运行时错误(运行时错误“13”:类型不匹配)。显然,“Macro2”正在清除内容,所以我真的在与自己作对Excel 运行时错误';13';:清除单元格内容时类型不匹配,excel,vba,mismatch,Excel,Vba,Mismatch,我对VBA很陌生,但到目前为止,我已经能够完成我需要的所有工作。然而,我似乎无法解决这个问题。从技术上讲,我有两个不同的私人潜水艇(工作表_变化),但我只能让他们工作,如果我把他们结合起来。第一种方法将B列中具有相同内容的单元格数量限制为3 第二个清除范围G:I,如果H=100,则复制范围A:F。当我出于某种原因清除内容时,“Macro1”会给我这个运行时错误(运行时错误“13”:类型不匹配)。显然,“Macro2”正在清除内容,所以我真的在与自己作对 Private Sub Worksheet
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
这一行的类型不匹配
如果工作表function.CountIf(范围(“B4:B350”),目标)>3,则
…因为您正在调用Target
(即.Value
)的默认成员,然后将其传递给CountIf
。问题在于,由于您位于工作表\u Change
事件处理程序中,因此目标不必是单个单元格。如果不是单个单元格,Target.Value
包含一个数组,如果您试图将其传递给CountIf
,该数组将抛出。如果您只对单个单元格的更改感兴趣,请在子项
的顶部放置一个保护子句:
如果Target.Cells.Count为1,则退出Sub
此外,如注释中所述,由于您正在更改单元格(虽然不清楚这是在哪个工作表中),因此在开始进行可能导致重新输入的更改之前,应禁用事件-Application.EnableEvents=False
。完成后别忘了重新启用它。快速测试-查看您(正确!)如何使用工作表“项目跟踪”限定范围()?使用Range()
执行此操作时,还需要使用其中的Cells()
引用。所以只要做工作表(“项目跟踪”).Range(工作表(“项目跟踪”).Cells(i,1),工作表(“项目跟踪”).Cells(i,6)).ClearContents
,如果您确定问题是因为\u Change()
事件正在导致更改(即调用自身),您应该能够通过将Application.EnableEvents=False
放在子项的开头,并将Application.EnableEvents=True
放在末尾来防止它。