VBA Code automaticky přidat komentář, pokud buňka obsahuje určitý dopis

hlasů
0

Jen jsem začal učit VBA minulý týden a teď jsem se snaží vyřešit následující problém: Pokud uživatelé zadají v určitém písmeno (a pouze v těchto uvedených písmen), pak komentář by měl být automaticky přidány do vybrané buňky. Komentář by měl obsahovat malý „hlavičku“ a pak vysvětlující text, který je napsaný v uživatelem. Zobrazený kód skutečně pracoval, ale jen na první buňku Testoval jsem ji. Takže, když jsem vykonán to poprvé, komentář automaticky objevil se zadaným textem jako já určena, ale v další buňky se tak nestalo. Dokonce restartování Excel nepomohlo - takže teď dokonce první buňku nevytváří komentář. To je důvod, proč jsem zmatený.

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

I uvedly na „listu“ a „změna“.

K dispozici je také další otázka, která by bylo zajímavé pro mě: je zde možnost, že vynikají automaticky vybere komentář poté, co byl generován, takže uživatel může zadat vysvětlující informace, aniž by bylo nutné ručně zvolit komentář?

Pomoc je vítána! Předem moc děkuji!

Položena 10/10/2019 v 00:38
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
0

Můžete použít Option Compare Textv oddílu deklarací (horní) části modulu umožňuje srovnání za celý modul být malá a velká písmena.

Přestože kód uvnitř sub rutinní „MyCompare“ je totožný, jejich výsledek je jiný:

Sub MyCompare

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

End Sub

Option Compare Text

Sub MyCompare

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

End Sub

Ale i tak, pojďme se dostat do vašeho aktuálního problému. To je s tímto řádek v kódu:

Application.EnableEvents = False

Všimněte si, že důvod, proč váš kód pracoval poprvé bylo proto, že jste zachytili Worksheet_Changeudálost. Ale teď právě zakázána akce v rámci tohoto kódu a nikdy ji znovu zapnout, a proto již nebude moci spustit Worksheet_Changepodprogram.

Jen ujistěte se, že jej znovu zapnout dříve, než opustíte svůj kód. Také by bylo moudré, aby zpracovat vaše chyby takovým způsobem, který umožní akce spíše než předčasně zastavit svůj kód, který by udržel je zakázána.

Jak jsem obvykle umožňují události bez spuštění Sub je pomocí okna ladění. Stisknutím tlačítka Ctrl+ Gv rámci VBE otevřít toto okno, pak v okně stačí zadat Application.EnableEvents = Truea stiskněte tlačítko Returna vy jste jen změnit tuto vlastnost.

Odpovězeno 10/10/2019 v 02:55
zdroj uživatelem

hlasů
0

Něco rychlé a snadné by bylo takhle níže;

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

Jen nezapomeňte, aby kód na listu, který chcete aby se to stalo dál, a zdá se, její velká a malá písmena také.

Odpovězeno 10/10/2019 v 01:15
zdroj uživatelem

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