Я работаю над электронной таблицей, которая использует пользовательский ввод для заполнения таблицы. Эти данные вводятся в таблицу с многочисленными обязательными столбцами. У меня есть командная кнопка, которая создает новую строку и вставляет все проверки данных, необходимые для новой позиции (ниже приведен пример).
Моя проблема связана с конкретным столбцом (синий кружок), на который полагаются другие ячейки на основе строки «да» или «нет». Если в столбце стоит «да», соседние ячейки что-то делают. Если в столбце стоит «нет», соседние ячейки делают что-то другое.
По мере того, как эта таблица будет увеличиваться в строках, диапазон столбцов, на котором я сфокусирован, будет динамически меняться. Я хочу, чтобы код VBA запускался, если рабочий лист испытывает событие изменения в этом динамическом диапазоне, используя подпрограмму Worksheet_Change (ByVal Target As Range).
Прямо сейчас я определяю этот динамический диапазон в моем подразделе commandbutton_click, потому что каждый раз, когда я нажимаю кнопку, добавляется новая строка, поэтому мне нужна электронная таблица, чтобы знать, что мой диапазон изменился (см. Мой код ниже).
Sub CommandButton1_Click()
Application.EnableEvents = False
Dim LastRowEntry As Long
Dim DeviceNo As Integer
'Dim RTUTable As Range
'Determine the last entry row & Copy
LastRowEntry = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row
DeviceNo = Sheet1.Cells(Rows.Count, 1).End(xlUp)
Sheet1.Cells(Rows.Count, 1).End(xlUp).EntireRow.Copy
'Once the last row is determined, go to the next row to paste
Sheet1.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteFormats
Sheet1.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValidation
'Incase the above cell has Conditional Formatting, we set the color back to "white"
Sheet1.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).EntireRow.Interior.ColorIndex = 0
Application.CutCopyMode = False
ActiveCell.Value = DeviceNo + 1
With RTUTable
RTUTable = Sheet1.Range(("G7"), Sheet1.Cells(LastRowEntry + 1, "G"))
End With
Application.EnableEvents = True
End Sub
Затем в другом подразделе я ввожу код, который «проверит», чтобы увидеть, изменилось ли значение этого динамического диапазона с ответом «да» или «нет». Здесь я ввожу свой определенный динамический диапазон (см. мой код ниже).
Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
'This code checks to see if the Device is polled by RTU
If Not Intersect(Target, Range(RTUTable)) Is Nothing Then
If ActiveCell.Value = "NO" Then
"DO SOMETHING"
Else
"DO SOMETHING"
End If
End If
Application.EnableEvents = True
End Sub
Может ли кто-нибудь помочь мне с сообщением об ошибке «Несоответствие типов», которое я получаю? Правильно ли я ввожу динамический диапазон в код пересечения?
Спасибо
****Обновление — дополнительная информация для уточнения*****
Я добавил некоторую информацию в массив, который я оцениваю. Ниже приведен снимок моей электронной таблицы.
Когда я перехожу в режим отладки, я просматриваю свою «таблицу Locals» и вижу, что успешно собираю свою информацию в массив.
Мне нужно запустить команду пересечения с этим массивом