Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 运行时错误';13';:清除单元格内容时类型不匹配_Excel_Vba_Mismatch - Fatal编程技术网

Excel 运行时错误';13';:清除单元格内容时类型不匹配

Excel 运行时错误';13';:清除单元格内容时类型不匹配,excel,vba,mismatch,Excel,Vba,Mismatch,我对VBA很陌生,但到目前为止,我已经能够完成我需要的所有工作。然而,我似乎无法解决这个问题。从技术上讲,我有两个不同的私人潜水艇(工作表_变化),但我只能让他们工作,如果我把他们结合起来。第一种方法将B列中具有相同内容的单元格数量限制为3 第二个清除范围G:I,如果H=100,则复制范围A:F。当我出于某种原因清除内容时,“Macro1”会给我这个运行时错误(运行时错误“13”:类型不匹配)。显然,“Macro2”正在清除内容,所以我真的在与自己作对 Private Sub Worksheet

我对VBA很陌生,但到目前为止,我已经能够完成我需要的所有工作。然而,我似乎无法解决这个问题。从技术上讲,我有两个不同的私人潜水艇(工作表_变化),但我只能让他们工作,如果我把他们结合起来。第一种方法将B列中具有相同内容的单元格数量限制为3

第二个清除范围G:I,如果H=100,则复制范围A:F。当我出于某种原因清除内容时,“Macro1”会给我这个运行时错误(运行时错误“13”:类型不匹配)。显然,“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

这一行的类型不匹配

如果工作表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
放在末尾来防止它。