Kod VBA, aby automatycznie dodać komentarz, jeśli komórka zawiera pewną literę

głosy
0

Właśnie rozpoczął naukę języka VBA w zeszłym tygodniu i teraz staram się rozwiązać następujący problem: Jeśli użytkownicy wpisać pewnego listu (i tylko tych określonych liter), a następnie komentarz powinien być dodawany automatycznie do wybranej komórki. Komentarz powinien zawierać małe „nagłówek” i wtedy tekst wyjaśniający, który jest wpisany w przez użytkownika. Przedstawiony kod faktycznie działa, ale tylko do pierwszej komórki Testowałem go. Tak więc, kiedy wykonywane go po raz pierwszy, komentarz automatycznie pojawił się z określonym tekstem jak zamierzonego, ale w następnej komórce nie. Nawet ponownym Excel nie pomogło - więc teraz nawet pierwsza komórka nie tworzy komentarz. Dlatego jestem zdezorientowany.

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

Mam określony do „Arkusz” i „zmiana”.

Istnieje również dodatkowe pytanie, co byłoby interesujące dla mnie: Czy istnieje możliwość, że Excel automatycznie wybiera komentarz po tym jak został wygenerowany, dzięki czemu użytkownik może wpisać informacje wyjaśniające bez konieczności wybrać komentarz ręcznie?

Pomoc jest mile widziana! Z góry bardzo dziękuję!

Utwórz 10/10/2019 o 00:38
źródło użytkownik
W innych językach...                            


2 odpowiedzi

głosy
0

Można użyć Option Compare Textw sekcji deklaracji (na górze) modułu w celu umożliwienia porównań na cały moduł być rozróżniana wielkość liter.

Chociaż kod w podprogram „MyCompare” jest identyczne, ich wynik jest inny:

Sub MyCompare

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

End Sub

Option Compare Text

Sub MyCompare

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

End Sub

Ale w każdym razie, przejdźmy do rzeczywistego problemu. To z tej linii w kodzie:

Application.EnableEvents = False

Zauważ, że powodem kod pracował po raz pierwszy było ponieważ uchwycił Worksheet_Changewydarzenie. Ale teraz po prostu wyłączony wydarzenia w ramach tego kodu i nie zwrócił go z powrotem, więc nie będziesz już w stanie uruchomić Worksheet_Changepodprogram.

Wystarczy upewnić się, aby go włączyć przed opuścić swój kod. Także, to byłoby mądre, aby obsługiwać błędy w sposób, który pozwoli raczej wydarzenia niż przedwcześnie zatrzymując swój kod, który będzie przechowywać je wyłączone.

Sposób, w jaki zwykle umożliwić zdarzenia, bez konieczności uruchamiania Sub jest za pomocą okna debugowania. Naciśnij przycisk Ctrl+ Gw VBE, aby otworzyć to okno, a następnie w oknie wystarczy wpisać Application.EnableEvents = Truei nacisnąć przycisk Returni po prostu zmienić tę właściwość.

Odpowiedział 10/10/2019 o 02:55
źródło użytkownik

głosy
0

Coś szybko i łatwo byłoby jak ten poniżej;

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

Wystarczy pamiętać, aby umieścić kod na arkuszu chcesz to się stało dalej, i wydaje jej wielkość liter również.

Odpowiedział 10/10/2019 o 01:15
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more