Чтобы ответить на ваши вопросы:
- Будет ли макрос, который воздействует на "Лист 2", пока я нахожусь на "Данные", помещен в "Лист 2" или в "ThisWorkbook"?
Неважно, где вы размещаете код, если код не запускается встроенным событием, таким как Worksheet_Change (). В этом случае он должен находиться на рабочем листе, в котором вы хотите обнаружить изменения. Если он не управляется событиями, я бы поместил код в его собственный модуль. Хотя каждому свое.
- Перед тем, как написать макрос, вам нужно выбрать раскрывающийся список "Рабочая книга", и тогда я бы предположил, что вы обнаруживаете изменение, так что "SheetChange" будет правильным?
Было бы целесообразно, если бы вы хотели, чтобы код, содержащийся в этой подпрограмме, выполнялся всякий раз, когда вносятся изменения в этот лист. Вы также можете вызывать код с помощью действия пользователя, например, нажатия кнопки, двойного щелчка или активации листа и т. Д.
- Обнаружит ли макрос изменение в ячейке, которая скрыта, и может ли строка этой ячейки быть скрытой?
Конечно! Почему бы и нет? Как пример:
Private Sub Worksheet_Change(ByVal Target As Range)
'Detect if the change was in a cell we care about (it can be hidden, VBA don't care)
If Not Intersect(Target, Column(3)) Is Nothing Then
'Something changed in Column C! Unhide whatever row had the change
Target.EntireRow.Hidden = False
End If
End Sub
- Наконец, что, черт возьми, я даже пишу для того, чтобы обнаруживать 0 и скрывать / показывать ячейки, я не заставил никого из них сделать что-либо до сих пор?
Используя этот последний пример, чтобы обнаружить изменение определенного столбца, определить, была ли это только одна ячейка, определить, является ли эта единственная ячейка теперь 0
и скрыть ее строку:
Private Sub Worksheet_Change(ByVal Target As Range)
'Detect if the change was in a cell we care about (it can be hidden, VBA don't care)
If Not Intersect(Target, Column(3)) Is Nothing Then
'Something changed in Column C!
If Target.Cells.Count = 1 Then
If Target.Value = "0" Then
Target.EntireRow.Hidden = True
End If
End If
End If
End Sub
Отметьте это в любом рабочем листе, который вы хотите обнаружить. Измените это первое значение If
так, чтобы вы обнаруживали изменения только в том диапазоне, в котором ожидаете это изменение (в качестве примера я выбрал столбец C).