Как заставить макрос работать с изменением в каждой ячейке динамической таблицы? Excel VBA - PullRequest
0 голосов
/ 03 мая 2019

У меня есть таблица, размер которой определяется пользователем. Мне нужен макрос для запуска каждый раз, когда пользователь вводит или изменяет значение в каждой ячейке 1-го столбца.

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

Private Sub Worksheet_Change(ByVal Target As Range)

Dim dyString As String
Dim dyRange As Range
Dim LastRowEntry_1 As Integer

LastRowEntry_1 = ActiveSheet.ListObjects("TableName").Range.Rows.Count

dyString = "B12:B" & LastRowEntry_1
Set dyRange = Range(dyString)

If Not Intersect(Target.Columns(1), dyRange) Is Nothing Then
    If IsEmpty(Target.Value) = False Then
    'RUN MACRO 1
    End If
End If

End Sub

В то время как макрос работает правильно для любого изменения в 1-й строке, каждый раз, когда новая строка добавляется в таблицу, макрос выполняется только при добавлении пустой строки (нажатие на кнопку) и не для каких-либо последующие изменения ячейки в новых строках. Мне нужно, чтобы он запускался только при вводе значений в эти ячейки или при изменении существующих значений, а не когда он пуст.

Куда я иду не так?

1 Ответ

0 голосов
/ 03 мая 2019

Вы должны убедиться, что код вашей кнопки не мешает вашему макросу события.

Структурируйте свой код кнопки следующим образом:

Sub ButtonCode()
    Application.EnableEvents = False
        ' your code to add rows
    Application.EnableEvents = True
End Sub

, а также в использовании макроса события:

If IsEmpty(Target.Value) = False Then
    Application.EnableEvents = False
         'RUN MACRO 1
    Application.EnableEvents = True
End If

Я бы также заменил:

If IsEmpty(Target.Value) = False Then

на:

If Target.Value <> "" Then
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...