Worksheet_Change Предотвращение добавления строк - PullRequest
0 голосов
/ 13 декабря 2018

Я гораздо хуже начинающих, когда дело доходит до программирования, так как я нахожу код VBA в сети и пытаюсь перенастроить его для своих целей.

Я использую приведенный ниже код для захвата метки времени и имени пользователя, когданекоторые ячейки изменены, что работает отлично, проблема возникает, когда я пытаюсь добавить или удалить строки.

Private Sub Worksheet_Change(ByVal Target As Excel.Range)

    Dim ThisRow As Long ' make sure to declare all the variables and appropriate types
    ThisRow = Target.Row

    If Target.Column >= 1 And Target.Column <= 1 Then

        Dim sOld As String, sNew As String
        sNew = Target.Value 'capture new value

        With Application
            .EnableEvents = False
            .Undo
        End With

        sOld = Target.Value 'capture old value
        Target.Value = sNew 'reset new value

        If sOld <> sNew Then

            ' time stamp & username corresponding to cell's last update
            Range("L" & ThisRow).Value = Now & Environ("username")
            Range("L:L").EntireColumn.AutoFit

        End If

        Application.EnableEvents = True

    End If
End Sub

Ошибка времени выполнения «13»:

Появляется окно Несоответствие типов.Если я нажму конец, строка будет добавлена ​​или удалена, но если я добавлю «Возобновить при ошибке» Рядом с кодом, всплывающее окно не появится, но строка также не будет удалена или добавлена.

Есть ли способ это исправить?Или я обречен нажимать клавишу end каждый раз, когда мне нужно добавить или удалить строку?

Изменить: Забыл упомянуть, что отладка выдвигает на первый план sNew = Target.Value 'capture new value в качестве проблемы.

1 Ответ

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

Target может быть диапазоном из нескольких ячеек (как при добавлении новой строки), поэтому в этих случаях вы не можете присвоить его значение переменной типа String.

Вы можете отобразить экранизменения полного столбца:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)

    If Target.Columns.Count = Me.Columns.Count Then Exit Sub 

    'or even 
    'If Target.Cells.Count > 1 Then Exit Sub 

    'rest of code here
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...