/ / Excel VBA - Wymuś pisanie dużych liter podczas usuwania treści - excel, excel-vba, vba

Excel VBA - Wymuś pisanie dużych liter podczas usuwania treści - excel, excel-vba, vba

Próbuję zmusić komórkę do przyjęcia dużej litery, która działa, używając poniższego kodu.

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:=""

Jednak po usunięciu zawartości komórki (co może być wymagane) pojawia się następujący komunikat o błędzie „Błąd czasu wykonywania” 13 „: Niezgodność typu”

Jeśli możesz rzucić na to jakieś światło, to byłoby świetnie!

Odpowiedzi:

2 dla odpowiedzi № 1

Cel jest zakresem, a nie łańcuchem (zakładając, że używasz zdarzenia Worksheet_Change).

Powinno być wiele komórek zmieniających się od razu, a nie puste komórki.

Kiedy masz jedną komórkę, wszystko w porządku, ponieważ wartość Docelowa wartość to Target.Value, która jest generalnie rzutowana jako String. Gdy zmienisz więcej niż jedną komórkę naraz, Target.Value zwróci tablicę, która nie będzie rzutowana na String.

Musisz więc zmieniać każdą komórkę naraz:

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 dla odpowiedzi nr 2

Utrzymuję swoją pozycję. Oryginalny kod to:

Target = UCase(Target)

co oznacza, że ​​chcesz mieć wielkie litery zakresu celu. Sposobem na to jest zastąpienie tej linii:

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

co daje:

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:=""