Ошибка времени выполнения «13»: несоответствие типов при очистке содержимого ячейки - PullRequest
0 голосов
/ 01 декабря 2018

Я очень плохо знаком с VBA, но до сих пор мне удавалось проработать все, что мне нужно.Тем не менее, я не могу решить эту проблему.Технически у меня есть 2 разные частные подпрограммы (Worksheet_Change), но я мог заставить их работать, только если я их объединил.Первый ограничивает количество ячеек с одинаковым содержанием в столбце B до 3.

Второй очищает диапазон G: I и копирует диапазон A: F, если значение H = 100. «Макро1» дает мнеэта ошибка во время выполнения (Run-time Error '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

1 Ответ

0 голосов
/ 01 декабря 2018

Вы получаете несоответствие типов в этой строке ...

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

Кроме того, как отмечено в комментариях, поскольку выизменяя ячейки (хотя неясно, на каком листе это находится), вы должны отключить события, прежде чем начинать вносить изменения, которые могут вызвать повторный ввод - Application.EnableEvents = False.Не забудьте включить его, когда закончите.

...