отредактировано, чтобы добавить больше о Me
ключевом слове
, чтобы активировать ваш "вызывающий" лист, просто используйте
Me.Activate
, поскольку в любом коде в области кода листа ключевое слово Me
относится к самому листу
, но вы могли бы также воспользоваться функцией "помощник" (пояснение в комментариях):
Function CreateSheet(shtName As String, sht As Worksheet) As Boolean
On Error Resume Next'prevent possible next statement error to stop code execution
Set sht = Worksheets(shtName)' try setting the sheet with passed name
On Error GoTo 0' restore default error handling
If sht Is Nothing Then' if there was not such sheet with passed name
Set sht = Worksheets.Add(after:=Sheets(Sheets.Count))' set a new one
sht.Name = shtName' give new sheet the passed name
Me.Activate' activate back the "calling" sheet
CreateSheet = True'return 'True' and have calling sub know that a new sheet hase been created and passed back via 'sht' parameter
End If
End Function
эта функция должна постоянно размещаться, чтобы не загромождать подпрограмму Change
события , следующим образом:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim logSht As Worksheet
If CreateSheet("Logsheet", logSht) Then
logSht.Range("A1:O1").Value = Array(...)
MsgBox "Log Sheet has been created ..."
Else
MsgBox "Log Sheet has already been created BEFORE..."
End If
End Sub