/ / Excel VBA - Großbuchstaben erzwingen, wenn Inhalte gelöscht werden - Excel, Excel-VBA, VBA

Excel VBA - Großbuchstaben erzwingen, wenn Inhalte gelöscht werden - excel, excel-vba, vba

Ich versuche, eine Zelle zu zwingen, einen Wert in Großbuchstaben zu schreiben, was mit dem folgenden Code funktioniert.

If Intersect(Target, Range("B9", "F10")) Is Nothing Then Exit Sub
Application.EnableEvents = False
ActiveSheet.Unprotect Password:=""
Target = UCase(Target)
Application.EnableEvents = True
ActiveSheet.Protect Password:=""

Wenn jedoch der Inhalt der Zelle gelöscht wird (was möglicherweise erforderlich ist), wird die folgende Fehlermeldung "Laufzeitfehler" 13 "angezeigt: Typenkonflikt"

Wenn Sie Licht ins Dunkel bringen können, wäre das großartig!

Antworten:

2 für die Antwort № 1

Ziel ist ein Bereich, kein String (vorausgesetzt, Sie verwenden das Worksheet_Change-Ereignis).

Es sollten sich mehrere Zellen gleichzeitig ändern, keine leeren Zellen.

Wenn Sie eine einzelne Zelle haben, ist alles in Ordnung, weil Wert von Target wird zu Target.Value ausgewertet, das im Allgemeinen als String umgewandelt werden kann. Wenn Sie mehr als eine Zelle gleichzeitig ändern, gibt Target.Value ein Array zurück, das nicht in String umgewandelt werden kann.

Sie müssen also jede Zelle einzeln ändern:

Dim cell as Range, cells as Range
Set cells=Intersect(Target, Range("B9", "F10"))
If cells Is Nothing Then Exit Sub
Application.EnableEvents = False
ActiveSheet.Unprotect Password:=""
For each cell In cells.Cells
Cell.Value = UCase(cell.Value)
Next
Application.EnableEvents = True
ActiveSheet.Protect Password:=""

1 für die Antwort № 2

Ich halte meine Position. Der ursprüngliche Code lautet:

Target = UCase(Target)

Das bedeutet, dass Sie den Zielbereich in Großbuchstaben schreiben möchten. Sie können dies tun, indem Sie diese Zeile durch Folgendes ersetzen:

For Each c In Target
If VarType(c.Value)=vbString Then
c.Value = UCase(c.Value)
End If
Next

was gibt:

If Intersect(Target, Range("B9", "F10")) Is Nothing Then Exit Sub
Application.EnableEvents = False
ActiveSheet.Unprotect Password:=""
Dim c As Range
For Each c In Target
If VarType(c.Value)=vbString Then
c.Value = UCase(c.Value)
End If
Next
Application.EnableEvents = True
ActiveSheet.Protect Password:=""