Код VBA для автоматического добавления комментария, если ячейка содержит определенную букву - PullRequest
0 голосов
/ 10 октября 2019

Я только начал изучать VBA на прошлой неделе, и сейчас я пытаюсь решить следующую проблему: если пользователи вводят определенную букву (и только эти указанные буквы), то комментарий должен автоматически добавляться в выбранную ячейку. Комментарий должен содержать небольшой «заголовок», а затем пояснительный текст, который вводится пользователем. Показанный код действительно работает, но только для первой ячейки, с которой я его тестировал. Поэтому, когда я выполнил его в первый раз, автоматически появился комментарий с указанным текстом, как я и предполагал, но в следующей ячейке этого не произошло. Даже перезапуск Excel не помог - так что теперь даже первая ячейка не создает комментарий. Вот почему я в замешательстве.

Private Sub Worksheet_Change(ByVal Target As Range)

Dim x

Application.EnableEvents = False

If Target.Value = "" Then

    Application.Undo
    x = Target.Value
    Target.Value = ""
    On Error Resume Next

    If (x = "A") Or (x = "B") Or (x = "C") Or (x = "D") Or (x = "E") Then Target.Comment.Delete
    On Error GoTo 0   

ElseIf Target.Value = "A" Then
    Target.AddComment ("explanationA: ")

ElseIf Target.Value = "B" Then
    Target.AddComment "explanationB: "

ElseIf Target.Value = "C" Then
    Target.AddComment "explanationC: "

ElseIf Target.Value = "D" Then
    Target.AddComment "explanationD: "

ElseIf Target.Value = "E" Then
    Target.AddComment "explanationE: "

End If
End Sub

Я указал "Рабочую таблицу" и "Изменить".

Есть еще один дополнительный вопрос, который меня заинтересовал бы: есть ливероятность того, что Excel автоматически выбирает комментарий после того, как он был сгенерирован, так что пользователь может ввести некоторую пояснительную информацию без необходимости выбирать комментарий вручную?

Помощь приветствуется! Заранее большое спасибо!

Ответы [ 2 ]

0 голосов
/ 10 октября 2019

Вы можете использовать Option Compare Text в разделе объявлений (вверху) вашего модуля, чтобы позволить сравнениям всего модуля без учета регистра.

Хотя код в подпрограмме "MyCompare" идентичених исход различен:

Sub MyCompare

    Debug.print "a" = "A"
    ' Prints False

End Sub

Option Compare Text

Sub MyCompare

    Debug.Print "a" = "A"
    ' Prints True

End Sub

Но в любом случае, давайте перейдем к вашей актуальной проблеме. Именно с этой строкой в ​​вашем коде:

Application.EnableEvents = False

Обратите внимание на причину, по которой ваш код работал в первый раз, потому что вы захватили событие Worksheet_Change. Но теперь вы просто отключили события в этом коде и больше никогда не включали его, поэтому вы больше не сможете запускать подпрограмму Worksheet_Change.

Просто обязательно включите ее перед выходом из кода,Кроме того, было бы разумно обрабатывать ваши ошибки таким образом, чтобы они включали события, а не преждевременно останавливали ваш код, что могло бы их отключить.

Я обычно включаю события без запуска Sub, используяокно отладки. Нажмите Ctrl + G в VBE, чтобы открыть это окно, затем в окне просто введите Application.EnableEvents = True и нажмите Return , и вы просто измените это свойство.

0 голосов
/ 10 октября 2019

Что-то быстрое и простое будет выглядеть следующим образом:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Select Case Target.Cells
    Case Is = "A": Target.AddComment ("explanationA: ")
    Case Is = "B": Target.AddComment ("explanationB: ")
    Case Is = "C": Target.AddComment ("explanationC: ")
    Case Is = "D": Target.AddComment ("explanationD: ")
    Case Is = "E": Target.AddComment ("explanationE: ")
End Select
On Error Resume Next
End Sub

Просто не забудьте поместить код на лист, на котором вы хотите, чтобы это происходило, и он также чувствителен к регистру.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...