Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA aus Kleinbuchstaben > Großbuchstaben machen

VBA aus Kleinbuchstaben > Großbuchstaben machen
06.01.2016 13:35:28
Erik
Hallo zusammen habe folgende Tabelle
https://www.herber.de/bbs/user/102611.xls
Wenn ich in Spalte C etwas eingebe soll automatisch von Klein auf Grossbuchstaben abgeändert werden.
Soweit funktioniert das auch.
Allerdings hört das Makro nicht mehr auf zu laufen, sodas ich es mit ESC stoppen muß.
Wie kann ich das ändern ?
Ps: wie muß es heißen damit die Ganze Spalte C gewählt wird ?
C1:C1000 ist ja so nicht richtig.
Vielen Dank
Gruß
Erik

Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA aus Kleinbuchstaben > Großbuchstaben machen
06.01.2016 13:42:35
Sepp
Hallo Erik,
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Zelle As Range

On Error GoTo Errorhandler

Application.EnableEvents = False

If Not Intersect(Target, Range("C:C")) Is Nothing Then
  For Each Zelle In Intersect(Target, Range("C:C"))
    Zelle = UCase(Zelle.Value)
  Next Zelle
End If

Errorhandler:

Application.EnableEvents = True
End Sub

Gruß Sepp

Anzeige
AW: VBA aus Kleinbuchstaben...
06.01.2016 13:43:11
Bernd
Hi,
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column  3 Then Exit Sub
Target.Value = UCase(Target.Value)
End Sub
mfg Bernd

VBA aus Kleinbuchstaben > Großbuchstaben machen
06.01.2016 13:43:11
Hajo_Zi
Halo Erik,
Du solltest die Reaktion auf die Eingabe abschalten

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("C1:C1000")) Is Nothing Then
Application.EnableEvents = False
Dim Zelle As Range
For Each Zelle In Range("C1:C1000" & Cells(Rows.Count, 1).End(xlUp).Row)
Zelle = UCase(Zelle.Value)
Next Zelle
Application.EnableEvents = True
End If
End Sub

warum immer alle Zellen muss uns nicht klar sein.

Anzeige
Ereignissmakros ausschalten
06.01.2016 13:43:26
ransi
Hallo,
Schua dir mal Application.EnableEvents an.
ransi

VBA aus Kleinbuchstaben > Großbuchstaben machen
06.01.2016 13:44:13
Hajo_Zi
Halo Erik,
Du solltest die Reaktion auf die Eingabe abschalten

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("C1:C1000")) Is Nothing Then
Application.EnableEvents = False
Dim Zelle As Range
For Each Zelle In Range("C1:C1000" & Cells(Rows.Count, 1).End(xlUp).Row)
Zelle = UCase(Zelle.Value)
Next Zelle
Application.EnableEvents = True
End If
End Sub

warum immer alle Zellen muss uns nicht klar sein.

Anzeige
warum immer die Spalte komplett neu abklappern?
06.01.2016 14:58:22
Matthias
Hallo
Warum denn immer die Spalte komplett neu abklappern?
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 3 Then Target = UCase(Target)
End Sub
Gruß Matthias

AW: warum immer die Spalte komplett neu abklappern?
06.01.2016 15:14:18
Erik
Hallo zusammen !
Danke an alle, die mir mit Rat und Tat geholfen haben.
PS.: Matthias, wenn ich bei Deinem Vorschlag mehrer Zellen in Spalte C markiere und lösche kommt
die Fehlermeldung: Laufzeitfehler 13 Typen unverträglich !
Gruß
Erik

Anzeige
And Target.Count = 1
06.01.2016 15:17:10
Matthias
Hallo
Dann musst Du eben abfragen ob Target.count=1 ist
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 3 And Target.Count = 1 Then Target = UCase(Target)
End Sub
Gruß Matthias

AW: And Target.Count = 1
06.01.2016 15:45:17
Hajo_Zi
Hallo Erik,
Hallo Matthias,
das führt aber ab 2007 zu einem Fehler, falls Spalte markiert.
Alle Zellen in größer 2007
für alle Versionen
Public Sub Beispiel()
Dim dblCount As Double
dblCount = CallByName(Selection, IIf(Val( _
Application.Version) > 11, "CountLarge", "Count"), VbGet)
MsgBox dblCount
End Sub

‘ von Nepumuk

Anzeige
Danke für die Info
06.01.2016 16:00:06
Matthias
Hallo Hajo
Hab leider nur als MaxVersion die Version XL2007
Aber jetzt wo Du es schreibst meine ich das schonmal gelesen zu haben
Danke Hajo, hoffentlich vergess ich es nicht wieder.
Gruß Matthias

AW: And Target.Count = 1
06.01.2016 16:06:19
Daniel
Dann werden aber die Werte nicht umgewandelt, wenn ich aus einem anderen Zellbereich mehrere Zellen kopiere und nach Spalte C einfüge, oder mehrere Zellen gleichzeitig mit hilfe von STRG+ENTER mit dem selben Wert befülle!
Gruss Daniel

Anzeige
AW: warum immer die Spalte komplett neu abklappern?
06.01.2016 15:15:49
Daniel
Hi Michael
dein Code landet auch in einer Endlosschleife, welche VBA bei mir nach 85 Umläufen gnädigerweise abbricht.
Eine Fehlermeldung unterbleibt, weil du keine Variablen verwendest und es deswegen keinen Speicherüberlauf gibt.
ausserdem sollte man berücksichtigen, dass es durchaus möglich ist, mehrere Zellen gleichzeitig zu ändern (bspw durch Kopieren-Einfügen)
daher besser so, das Application.EnableEvents = False verhindert den Selbstaufruf des Events beim Ändern eines Zellwerts:
 Private Sub Worksheet_Change(ByVal Target As Range)
Dim Zelle As Range
If Not Intersect(Target, Columns(3)) Is Nothing Then
Application.EnableEvents = False
For Each Zelle In Intersect(Target, Columns(3))
Zelle.Value = UCase(Zelle.Value)
Next
Application.EnableEvents = True
End If
End Sub
Gruss Daniel
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

VBA zur Umwandlung von Kleinbuchstaben in Großbuchstaben


Schritt-für-Schritt-Anleitung

Um in Excel Kleinbuchstaben automatisch in Großbuchstaben umzuwandeln, kannst Du ein VBA-Makro verwenden. Hier ist eine einfache Anleitung, um dies zu erreichen:

  1. Öffne den VBA-Editor:

    • Drücke ALT + F11 in Excel.
  2. Füge ein neues Modul hinzu:

    • Klicke im VBA-Editor mit der rechten Maustaste auf VBAProject (DeineDatei.xlsm) und wähle Einfügen > Modul.
  3. Kopiere den folgenden Code in das Modul:

    Private Sub Worksheet_Change(ByVal Target As Range)
       If Not Application.Intersect(Target, Range("C:C")) Is Nothing Then
           Application.EnableEvents = False
           Dim Zelle As Range
           For Each Zelle In Intersect(Target, Range("C:C"))
               Zelle.Value = UCase(Zelle.Value)
           Next Zelle
           Application.EnableEvents = True
       End If
    End Sub
  4. Schließe den VBA-Editor und gehe zurück zu Excel.

  5. Teste das Makro:

    • Gib in eine Zelle der Spalte C einen Kleinbuchstaben ein. Der Text sollte automatisch in Großbuchstaben umgewandelt werden.

Häufige Fehler und Lösungen

  • Endlosschleife: Wenn das Makro nicht mehr aufhört zu laufen, stelle sicher, dass Application.EnableEvents auf False gesetzt ist, bevor Du Änderungen an den Zellen vornimmst. Dies verhindert, dass das Makro sich selbst erneut aufruft.

  • Bereichsprobleme: Wenn Du nicht nur eine Zelle, sondern mehrere Zellen in Spalte C gleichzeitig änderst, solltest Du sicherstellen, dass Dein Code alle Zellen in diesem Bereich behandelt. Verwende Intersect, um die bearbeiteten Zellen zu identifizieren.


Alternative Methoden

Falls Du kein VBA verwenden möchtest, kannst Du die Excel-Funktion UPPER nutzen:

  1. Gib in einer anderen Zelle folgendes ein:
    =UPPER(C1)
  2. Ziehe die Formel nach unten, um sie auf andere Zellen anzuwenden.

Dies ist eine einfache Methode, um Kleinbuchstaben in Großbuchstaben umzuwandeln, jedoch nicht automatisch.


Praktische Beispiele

Ein praktisches Beispiel wäre, wenn Du eine Liste von Namen hast, die in Kleinbuchstaben eingegeben wurden. Mit dem obigen VBA-Makro kannst Du sicherstellen, dass alle Namen in Großbuchstaben angezeigt werden, sobald Du sie in Spalte C eingibst.

Ein weiteres Beispiel ist die Verarbeitung von Daten, bei denen Du sicherstellen möchtest, dass alle Eingaben einheitlich in Großbuchstaben dargestellt werden, um die Lesbarkeit zu verbessern.


Tipps für Profis

  • Vermeide unnötige Schleifen: Wenn Du sicher bist, dass nur eine Zelle geändert wird, kannst Du den Code vereinfachen, indem Du die Schleife weglässt:

    Private Sub Worksheet_Change(ByVal Target As Range)
       If Target.Column = 3 Then Target.Value = UCase(Target.Value)
    End Sub
  • Ereignisse wieder aktivieren: Vergiss nicht, Application.EnableEvents = True am Ende Deines Makros zu setzen, um sicherzustellen, dass die Ereignisse wieder normal funktionieren.


FAQ: Häufige Fragen

1. Wie kann ich das Makro nur auf einen bestimmten Bereich anwenden?
Du kannst den Bereich im Intersect Befehl anpassen, z.B. Range("C1:C1000").

2. Was passiert, wenn ich mehrere Zellen gleichzeitig bearbeite?
Das oben genannte Makro verarbeitet alle Zellen in Spalte C, auch wenn Du mehrere Zellen gleichzeitig bearbeitest. Es wird jedoch empfohlen, Application.EnableEvents = False zu verwenden, um Endlosschleifen zu vermeiden.

3. Kann ich das Makro in einer älteren Excel-Version verwenden?
Ja, das Makro ist mit Excel-Versionen ab 2007 kompatibel, es könnte jedoch in älteren Versionen zu Problemen kommen, wenn Du große Bereiche bearbeitest.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige