VBA: Около go назад к целевой ячейке (событие смены листа) или хотя бы к этому целевому листу после описанных ниже процедур - PullRequest
0 голосов
/ 13 апреля 2020

Я новичок в VBA: D Я создаю LogSheet для записи любых изменений из листов. С самого начала я хочу проверить, существует ли «LogSheet» уже при возникновении события смены листа. Поэтому я поместил эту «процедуру проверки» в начале события SheetChange. Но раздражает то, что если «Журнал» не существует, то он создает его, и активный лист переключается на этот новый созданный «Журнал».

Мой вопрос: может ли существовать метод: после изменения события срабатывает и новый LogSheet создан, выбор будет go вернуться к цели, которую я только что изменил ранее, вместо того, чтобы остаться в «LogSheet». введите описание изображения здесь

1 Ответ

0 голосов
/ 13 апреля 2020

отредактировано, чтобы добавить больше о 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...