Registriert seit: 09.05.2018
Version(en): 2016
17.05.2018, 22:28
(Dieser Beitrag wurde zuletzt bearbeitet: 17.05.2018, 22:54 von h1138123.)
Hallo!
Wie kann ich den fürs Tabellenblatt "Tabelle1" hinterlegten (beispielhaften) VBA-Code auch auf weitere Tabellenblätter (zum Beispiel "Tabelle2" und "Tabelle3") anwenden, ohne ihn dort jeweils ebenfalls hinterlegen zu müssen? Optimal wären eine Variante für mehrere bestimmte (explizit anzugebende) und eine weitere für alle Tabellenblätter. Hintergrund ist in erster Linie die Wartbarkeit, Änderungen könnten so zentral an einer Stelle vorgenommen werden.
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Not Intersect(Target, Range("A:Z")) Is Nothing Then
Target.Value = UCase(Target.Value)
End If
Application.EnableEvents = True
End Sub
Mappe1.xlsm (Größe: 14,01 KB / Downloads: 1)
Gruß
h1138123
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
Hallo,
nimm das Ereignis im VBA-Modul
DieseArbeitsmappe:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dein Code
End Sub
Sieh Dir dazu auch die Select Case - Anweisung in der Hilfe an.
Gruß Uwe
Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:1 Nutzer sagt Danke an Kuwer für diesen Beitrag 28
• h1138123
Registriert seit: 09.05.2018
Version(en): 2016
Hallo Kuwer!
Variante für mehrere bestimmte (explizit anzugebende) Tabellenblätter:
Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Select Case Sh.Name
Case "Tabelle1", "Tabelle3"
Application.EnableEvents = False
If Not Intersect(Target, Range("A:Z")) Is Nothing Then
Target.Value = UCase(Target.Value)
End If
Application.EnableEvents = True
End Select
End Sub
Variante für alle Tabellenblätter:
Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Application.EnableEvents = False
If Not Intersect(Target, Range("A:Z")) Is Nothing Then
Target.Value = UCase(Target.Value)
End If
Application.EnableEvents = True
End Sub
So? Irgendwelche Einwände oder Verbesserungsvorschläge? Ansonsten vielen Dank!
Gruß
h1138123
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
Hallo,
der Anfang ist schon mal gut, aber da fehlen noch 3 wichtige Sachen:
1. muss Sh nicht zwingend das aktive Blatt sein. Also müssen Bereiche genau referenziert werden.
2. könnte Target auch mehrere Zellen, vielleicht auch noch nicht einmal zusammenhängend, enthalten.
3. könnte irgend ein Fehler zum Abbruch des Codes führen, so dass die Zeile, welche Ereignisse wieder einschaltet, gar nicht ausgeführt wird.
So wäre (hoffentlich) alles abgedeckt:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim rngAlleZellenImBereich As Range
Dim rngTeilbereich As Range
Dim rngEinzelneZelle As Range
Select Case Sh.Name
Case "Tabelle1", "Tabelle3"
Set rngAlleZellenImBereich = Application.Intersect(Target, Sh.Range("A:Z"))
If Not rngAlleZellenImBereich Is Nothing Then
On Error Resume Next
Application.EnableEvents = False
For Each rngTeilbereich In rngAlleZellenImBereich.Areas
For Each rngEinzelneZelle In rngTeilbereich
rngEinzelneZelle.Value = UCase(rngEinzelneZelle.Value)
Next rngEinzelneZelle
Next rngTeilbereich
Application.EnableEvents = True
On Error GoTo 0
End If
End Select
End Sub
Gruß Uwe
Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:1 Nutzer sagt Danke an Kuwer für diesen Beitrag 28
• h1138123
Registriert seit: 12.10.2014
Version(en): 365 Insider (32 Bit)
Moin!
Apropos Einwände und daher nur ergänzend:
Sh.Name bezieht sich auf den Tabellennamen, der jederzeit vom Anwender geändert werden kann und das Makro ins Leere laufen lässt.
Ich würde immer Sh.Codename wählen.
Den Codename (im Projekt-Explorer vor der Klammer) kann man nur in der VBE ändern.
Projekt mit Kennwort sichern, Projekt für die Anzeige sperren und Du bist auf der sicheren Seite.
Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag.
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:1 Nutzer sagt Danke an RPP63 für diesen Beitrag 28
• h1138123
Registriert seit: 09.05.2018
Version(en): 2016
Hallo Kuwer und RPP63!
Vielen Dank für eure wertvolle Hilfe!
Gruß
h1138123