Ниже приведен пример индекса строки
+---+---+---+---+---+
| H | e | l | p | A |
+---+---+---+---+---+
0 1 2 3 4 5
-5 -4 -3 -2 -1
str="Name string"
примера среза: [начало: конец: шаг]
str[start:end] # items start through end-1
str[start:] # items start through the rest of the array
str[:end] # items from the beginning through end-1
str[:] # a copy of the whole array
Ниже приведен пример использования
print str[0]=N
print str[0:2]=Na
print str[0:7]=Name st
print str[0:7:2]=Nm t
print str[0:-1:2]=Nm ti
Чтобы зафиксировать изменения по формуле, вы должны использовать событие Worksheet_Calculate()
.
=Sheet2!A1+1
Теперь в модуле вставьте этот код
Public PrevVal As Variant
Вставьте это в область кода листа
Private Sub Worksheet_Calculate()
If Range("A1").Value <> PrevVal Then
MsgBox "Value Changed"
PrevVal = Range("A1").Value
End If
End Sub
И, наконец, в области кода ThisWorkbook
вставьте это код
Private Sub Workbook_Open()
PrevVal = Sheet1.Range("A1").Value
End Sub
Закрыть и сохранить книгу и снова открыть ее. Теперь сделайте любое изменение в ячейке A1 Sheet2
. Вы заметите, что вы получите окно сообщения MsgBox "Value Changed"
SNAPSHOTS
[/g0]
Событие workheet_change будет срабатывать только вручную. Я думаю, что лучше всего было бы реализовать это как событие изменения рабочего листа на вашем рабочем листе B, где я предполагаю, что изменения пользовательского ввода происходят.
Есть несколько альтернатив, которые я предлагаю, если это действительно вам не подходит, но я думаю, что это, вероятно, самый лучший вариант.
Изменить: другое предложение для следующих комментариев
Объект ThisWorkbook имеет событие SheetChange, которое будет если все листы в книге изменены. Если вы можете определить диапазоны, где данные будут введены на каждом из листов B, вы можете использовать эти диапазоны, как в вашем исходном коде.
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Not Sh Is Sheets("Worksheet A") Then
If Intersect(Sh.Range("B1:B5"), Target) Then
'Call MailAlert as required here
ElseIf Intersect(Sh.Range("B10:B20"), Target) Then
'Call MailAlert as required here
Else ' Etc...
'Call MailAlert as required here
End If
End If
End Sub
Сообщите мне, как это происходит.