Codice VBA per aggiungere automaticamente un commento se una cella contiene una certa lettera

voti
0

Ho appena iniziato a imparare VBA la scorsa settimana e ora sto cercando di risolvere il seguente problema: se gli utenti digitano in una certa lettera (e solo queste lettere specificate), poi un commento deve essere aggiunto automaticamente alla cella selezionata. Il commento dovrebbe contenere un piccolo colpo di testa e poi un testo esplicativo, che viene digitato dall'utente. Il codice mostrato effettivamente, ma solo per la prima cella ho testato con. Così, quando ho eseguito la prima volta, il commento è apparso automaticamente con il testo specificato come ho inteso, ma nella cella accanto non ha fatto. Anche il riavvio di Excel non ha aiutato - così ora anche la prima cella non creare il commento. Ecco perché mi sono confuso.

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

Ho specificato foglio di lavoro e Change.

C'è anche una questione ulteriore, che sarebbe di interesse per me: C'è una possibilità, che Excel seleziona automaticamente il commento dopo che è stato generato, in modo che l'utente può digitare alcune informazioni esplicative senza la necessità di selezionare il commento manualmente?

L'aiuto è apprezzato! Grazie mille in anticipo!

È pubblicato 10/10/2019 alle 00:38
fonte dall'utente
In altre lingue...                            


2 risposte

voti
0

È possibile utilizzare Option Compare Textla sezione delle dichiarazioni (in alto) del modulo per consentire il confronto per l'intero modulo per essere maiuscole e minuscole.

Sebbene il codice all'interno del sub routine "MyCompare" è identico, il loro esito è diverso:

Sub MyCompare

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

End Sub

Option Compare Text

Sub MyCompare

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

End Sub

Ma comunque, veniamo al tuo attuale problema. E 'con questa linea nel codice:

Application.EnableEvents = False

Si noti il motivo per il vostro codice ha funzionato la prima volta è stato perché hai catturato l' Worksheet_Changeevento. Ma ora basta disattivato eventi all'interno di questo codice e mai girato indietro sopra, pertanto, non sarà più in grado di eseguire il Worksheet_Changesubroutine.

Basta fare in modo di riattivarlo prima di uscire il vostro codice. Inoltre, sarebbe saggio per gestire gli errori in modo tale da attivare gli eventi piuttosto che fermarsi prematuramente il codice, che sarebbe tenerli disabilitato.

Il modo in cui di solito attivare gli eventi senza correre un Comparto è quello di utilizzare la finestra di debug. Premete Ctrl+ Gall'interno del VBE per aprire questa finestra, quindi all'interno della finestra è sufficiente digitare Application.EnableEvents = Truee premere il tasto Returne si è appena cambiare quella proprietà.

Risposto il 10/10/2019 a 02:55
fonte dall'utente

voti
0

Qualcosa di semplice e veloce sarebbe stato così di seguito;

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

Basta ricordarsi di mettere il codice sul foglio che si desidera che accada, e sembra proprio maiuscole e minuscole anche.

Risposto il 10/10/2019 a 01:15
fonte dall'utente

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