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

zeilenhöhe per klick auf zeilenkopf verändern

Forumthread: zeilenhöhe per klick auf zeilenkopf verändern

zeilenhöhe per klick auf zeilenkopf verändern
20.07.2007 00:06:00
kekno
hallo!
ich möchte per mausklick auf den zeilenkopf(die zeilennummer, ums genau zu sagen) die zeilenhöhe vergrößern(verdoppeln). ein erneuter mausklick auf die zeilennummer soll den alten zustand wieder herstellen. die schrift braucht sich nicht zu verändern, wenn es aber einfach machbar ist...
ich finde es angenehmer, in breiten tabellen die zeile genau sehen zu können in der ich gerade wühle...
wer weiß rat? danke!

Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Zeilenhöhe ... Beispiel
20.07.2007 01:10:09
Matthias
Hallo
Beispiel:
ins Tabelleblatt1

Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Cells.Rows.RowHeight = 12.75 'anpassen! (aktuelle Zeilenhöhe)
ActiveCell.Rows.RowHeight = ActiveCell.Rows.RowHeight * 2
End Sub


Beschreibung:
Egal, wo Du Dich in der tabelle bewegst, die Zeile der aktive Zelle wird doppelt so hoch.
Userbild

Anzeige
AW: zeilenhöhe per klick auf zeilenkopf verändern
20.07.2007 01:13:26
Ramses
Hallo
Wenn das nur in einer Tabelle funktionieren soll:
Rechte Maustaste auf den Tabellenreiter
Code anzeigen
und diese Code dort reinkopieren
Option Explicit

Dim oldRow As Long
Dim oldHeight As Double
'Erwartete Zeilenhöhe * 2.5
Const myRH As Double = 2.5

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If oldRow = 0 Then
        oldRow = Target.Row
        oldHeight = Target.RowHeight
        Rows(Target.Row).RowHeight = Rows(Target.Row).RowHeight * myRH
    End If
    If oldRow <> Target.Row Then
        Rows(oldRow).RowHeight = oldHeight
        oldRow = Target.Row
        oldHeight = Target.Height
        Rows(Target.Row).RowHeight = Rows(Target.Row).RowHeight * myRH
    End If
End Sub

Man kann es nur mit erheblichen Aufwand so programmieren, dass es in allen Tabellen universell gültig wäre, daher nur die lokale Version
Gruss Rainer

Anzeige
AW: zeilenhöhe per klick auf zeilenkopf verändern
20.07.2007 01:42:00
fcs
Hallo kekno,
dann will ich als weiterer Nachtschwärmer noch die Version für die gesamte Arbeitsmappe beisteuern.
Folgenden Code unter "DieseArbeitsmappe" einfügen.
Ich bin allerdings überfragt, ob man das Ganze auch so umsetzen könnte, dass es als AddIn oder in der Persönlichen Makroarbeitsmappe installiert wird und dann automatisch in jeder geöffneten Datei aktiv ist ohne dass das Makro in jeder Datei eingebaut sein muss.
Nicht getestet hab ich wie diese Funktionalität mit anderen Ereignis-Prozeduren harmoniert.
Gruß
Franz

'#### Verdoppelung der Höhe einer Zeile wenn Zeilenkopf im Tabellenblatt gewählt wird ####
'Zeilenhöhe wird zurückgesetzt, wenn _
* eine andere Zeile gewählt wird _
* die Zeile nochmals selektiert wird _
* das Blatt verlassen wird _
* die Arbeitsmappe gewechselt wird _
* die Datei geschlossen wird
Private lastRow As Range, lastHeight As Double
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Not lastRow Is Nothing Then
lastRow.RowHeight = lastHeight
Set lastRow = Nothing
Me.Save 'Datei speicehrn, falls die Höhe einer Zeile noch gedoppelt war
End If
End Sub
Private Sub Workbook_Deactivate()
If Not lastRow Is Nothing Then
lastRow.RowHeight = lastHeight
Set lastRow = Nothing
End If
End Sub
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
If Not lastRow Is Nothing Then
lastRow.RowHeight = lastHeight
Set lastRow = Nothing
End If
End Sub
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Excel.Range)
Select Case Sh.Name
Case "" 'Liste Blätter in denen Funktion nicht aktiv sein soll (Beispiel: "Tab1", "Tab4")
Case Else
If Target.Cells.Count = Sh.Columns.Count Then
If Not lastRow Is Nothing Then
lastRow.RowHeight = lastHeight
If lastRow.Address = Selection.Address Then
Set lastRow = Nothing
GoTo weiter
End If
End If
Set lastRow = Selection
lastHeight = lastRow.RowHeight
lastRow.RowHeight = 2 * lastHeight
End If
End Select
weiter:
End Sub


Anzeige
AW: zeilenhöhe per klick auf zeilenkopf verändern
20.07.2007 01:54:45
Ramses
Hallo Franz
Ich habe nicht umsonst gesagt, dass die Prozedur für die gesamte Mappe sehr aufwändig ist :-)
Kopier mal den Code in eine leere Mappe

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
Cells(1, 1).Interior.ColorIndex = 3
MsgBox "alt"
End Sub


wechsle von einer Tabelle in die andere und achte darauf WELCHE Zelle nun rot wird.
Dann weisst du was ich meine, mit aufwändiger Programmierung. :-)
Gruss Rainer

Anzeige
AW: zeilenhöhe per klick auf zeilenkopf verändern
20.07.2007 04:09:36
fcs
Hallo Rainer,
diese kleine Variante färbt dann die Zelle A1 im deactivierten Blatt rot:

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
Sh.Cells(1, 1).Interior.ColorIndex = 3
MsgBox "alt"
End Sub


Soviel zum Stichwort aufwändige Programmierung :-).
Das Problem bei Kekno's Wunsch war ja, dass die geänderte Zeilenhöhe auch mit Sicherheit vor dem Speichern wieder rückgängig gemacht wird. Auch dann wenn der Anwender nicht gleich wieder die Zeilenhöhe zurücksetzt. Das erforderte dann entsprechende zusätzliche Prüfroutinen.
Das war aber weniger ein Problem des Programmieraufwands als vielmehr rauszufinden bei welchen Aktivitäten die Zeilenhöhe zurückgesetzt werden muss.
Gruß
Franz

Anzeige
Gute Variante...
20.07.2007 11:05:42
Ramses
Hallo Franz
Dein Code funktioniert nicht ganz korrekt,... zumindest bei mir:
If Target.Cells.Count = Sh.Columns.Count Then
If Not lastRow Is Nothing Then
lastRow.RowHeight = lastHeight
If lastRow.Address = Selection.Address Then
Set lastRow = Nothing
GoTo weiter
End If
End If
Die nächste Anweisung tritt NIE ein, wenn nicht die obere IF-Abfrage wahr ist.
Das wäre jedoch zwingend erforderlich, da sonst "lastRow" immer "Nothing" ist bei einem Sheet-Wechsel
Set lastRow = Selection
lastHeight = lastRow.RowHeight
lastRow.RowHeight = 2 * lastHeight
End If
Set lastRow = Selection
würde ich jedoch nicht nehmen, sondern "Target", da sich Selection auf die gesamte Auswahl bezieht und nicht auf die aktive Zelle. Dann wird der gesamte Markierungsbereich in der Zeilenhöhe verdopptelt und nicht nur die aktive Zelle/Zeile
Das zweite Problem tritt hier auf

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
If Not lastRow Is Nothing Then
lastRow.RowHeight = lastHeight
Set lastRow = Nothing
End If
End Sub


Beim "Deactivate-Ereignis" leerst du die Variable "lastRow", aber diese wird nicht neu initialisiert mit einem "Activate"-Ereignis, demzufolge ist beim "Workbook_SheetSelectionChange" die Variable wieder "Nothing" und es kommt zu einem erneuten Fehler, da "LastRow" neu abgefragt wird aber nicht gefüllt ist.
Das passiert erst wenn du die "If-Abfrage" im "Workbook_SheetSelectionChange" Code änderst.
An das Sheet-Object habe ich nicht gedacht :-)
Dann müsste das dann jedoch so lauten


Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
If Not lastRow Is Nothing Then
With Sh.Cells(lastRow.Row, 1)
.RowHeight = lastHeight
End With
Set lastRow = Nothing
End If
End Sub


Gruss Rainer

Anzeige
AW: Gute Variante...
21.07.2007 08:54:00
fcs
Hallo Rainer,
keine Ahnung warum es bei dir nicht funktioniert. Bei mir unter EXCEL 97 läuft es perfekt .
Hast du evtl. die Variablen-Deklaration vor den Prozeduren vergessen mit zu kopieren?
Private lastRow As Range, lastHeight As Double
lastRow repräsentiert immer den Zellbereich der letzten Zeile also ein Objekt, nicht die Nummer der Zeile.
Wenn die Deklaration fehlt, dann interpretiert VBA lastRow als Typ Variant und da gibt es dann Probleme mit der Prüfung
If Not lastRow is Nothing then
da nur Objekt-Variablen den Wert/Zustand 'Nothing' haben können.
By the way: Target und Selection sind beim Start der Worksheet-Ereignismakros identisch.
Target ist nicht gleich der aktiven Zelle hierfür gibt es ja ActiveCell.
Probiere mal in einem leeren Blatt folgende Prozedur und selektiere verschiedene Zellbereiche

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
MsgBox "Target-Adresse: " & Target.Address & "  |  Selection-Adresse: " & Selection.Address
Target.Value = "Test"
End Sub


Deswegen ist es manchmal erforderlich Target zu überprüfen, ob es wirklich nur eine Zelle umfasst, oder auch alle Zellen von Target abzuarbeiten, wenn beim Change-Ereignis auch das Eintragen von Werten per Kopieren von mehreren Zellen oder Ziehen mit der Maus korrekt erfasst werden soll.
Gruß
Franz

Anzeige
AW: Gute Variante...
21.07.2007 10:39:40
Ramses
Hallo Franz
"...By the way: Target und Selection sind beim Start der Worksheet-Ereignismakros identisch...."
Da hast du natürlich recht und ich einen Denkfehler. Meine Überlegung war hier vielmehr die Zeilenhöhe der zuerst ausgewählten Zelle zu übernehmen.
Ich habe den Code wie von dir beschrieben in das Klassenmodul "Diese Arbeitsmappe" kopiert, incl. der Private Deklarationen. Das SheetSelectionChanger-Ereignis tritt nicht ein, und der Sheet-Wechsel haut nicht hin.
Beim SheetDeactivate, Workbook-Deactivate erhalte ich den Fehler
Run Time Error: 9
Object Variable oder With Variable not Set
Und das stimmt ja auch
Nochmals zur Erläuterung, vielleicht habe ich hier einen riesigen Denkfehler, aber das macht in meinen Augen keinen Sinn

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
'Wenn LastRow is NICHT NOTHING
'also "lastRow" HAT EINEN Wert
If Not lastRow Is Nothing Then
'Zuweisen der Zeilenhöhe an die Variable "lastRow"
lastRow.RowHeight = lastHeight
' ... aber hier wird die Variable ja wieder geleert !!
' ... wozu also zuerst die Zuweisung ?
Set lastRow = Nothing
End If
End Sub


Aber was passiert, wenn "lastRow = Nothing" ?
Hier muss auf jeden Fall noch ein Worksheet-Activate, und auch noch ein Workbook-Activate Ereignis rein, der die Variable "lastRow" nochmals mit dem Wert der ausgewählten Zelle auf dem neu gewählten Tabellenblatt füllt, und diese auch gleich vergrössert darstellt.
Hilf mir mal auf die Sprünge bei dieser Anweisung, die krieg ich trotz mehrmaligem durchlesen nicht auf die Reihe:
If Target.Cells.Count = Sh.Columns.Count Then
End if
in deinem "...Workbook_SheetSelectionChange..." Ereignis.
Alle nachfolgenden Anweisungen
If Not lastRow Is Nothing Then
lastRow.RowHeight = lastHeight
If lastRow.Address = Selection.Address Then
Set lastRow = Nothing
GoTo weiter
End If
End If
Set lastRow = Selection
lastHeight = lastRow.RowHeight
lastRow.RowHeight = 2 * lastHeight
treten NUR ein, wenn die Anzahl der Zellen in der Auswahl (Target/Selection) gleich der Anzahl Spalten in der Tabelle ist ?
Das kriege ich nicht auf die Reihe wozu das gut sein soll.
Das würde doch bedeuten, dass ich eine Auswahl haben muss von mindestens 16*16 Zellen um auf die abgefragten 256 Spalten zu kommen?
Aber NUR hier, innerhalb der IF-Schleife kriegt "lastRow" einen neuen Wert, der dann zumindest im Sheet-Selection-Ereignis verwendet werden kann. Das muss von meinem Verständnis, und dann funktioniert zumindest das Sheet-Selection-Change-Ereignis bei mir, so heissen:

Select Case Sh.Name
    Case "" 'Liste Blätter in denen Funktion nicht aktiv sein soll (Beispiel: "Tab1", "Tab4")
    Case Else
        If Target.Cells.Count = Sh.Columns.Count Then
            If Not lastRow Is Nothing Then
                lastRow.RowHeight = lastHeight
                If lastRow.Address = Selection.Address Then
                    Set lastRow = Nothing
                    GoTo weiter
                End If
            End If
        End If
        'Ausserhalb der IF-Abfrage
        Set lastRow = Selection
        lastHeight = lastRow.RowHeight
        lastRow.RowHeight = 2 * lastHeight
End Select

Ausserdem taucht hier das Problem dann auf, dass bei Auswahl einer anderen Tabelle, ABER OHNE Auswahl einer anderen Zelle auf dieser Tabelle, die Variable "lastRow" ja immer noch leer ist.
Daher wird das SheetSelection Ereignis erst bei der ZWEITEN Auswahl einer Zelle auf der Tabelle ausgeführt.
1. Aktivierung der neuen Tabelle
> Nichts passiert, die aktive !!! Zelle bleibt gleich gross wie sonst auf
> Daher sollte ein Worksheet-Activate-Ereignis noch rein, der die aktive Zelle bei der Auswahl eines Sheet verändert.
2. Auswahl einer anderen Zelle auf der Tabelle >
Jetzt wird erst die Variable "lastRow" neu gefüllt und die Zeilenhöhe angepasst
Gruss Rainer

Anzeige
AW: Gute Variante...
21.07.2007 11:57:45
fcs
Hallo Rainer,
schau noch einmal in Kekno's ürsprüngliche Frage:
Die Änderung der Zeilenhöhe soll dann erfolgen/zurückgesetzt werden, wenn links im Tabellenblatt auf den Zeilenkopf (die Nummer) der Zeile geklickt wird, also die gesamte Zeile markiert/selektiert wird.
Diesen Zustand prüfe ich mit

Case Else
If Target.Cells.Count = Sh.Columns.Count Then


bzw. wie du korrekter Weise anmerkst prüfe ich ob die Zahl der Zellen in Target gleich der Anzahl Spalten im Blatt ist.
Folgende Anpassung beseitigt auch diesen kleinen Bug.


Case Else
If Target.Cells.Count = Sh.Columns.Count And Target.Rows.Count = 1 Then
'oder auch
Case Else
If Target.Cells.Count = Target.EntireRow.Cells.Count And Target.Rows.Count = 1 Then


Ich hoffe damit sind alle Unklarheiten beseitigt.
Evtl. gibt es ja auch noch eine elegantere Möglichkeit in VBA auszuwerten, dass exakt eine Tabellenzeile Selektiert/markiert ist.
Gruß
Franz

Anzeige
AW: Gute Variante...
21.07.2007 12:25:15
Ramses
Hallo Franz
Das mit dem Klick auf den Zeilenkopf habe ich dann wohl nicht richtig gelesen.
Ich hatte das so interpretiert, dass bei Auswahl einer Zelle !! die Zeilenhöhe verändert wird zur Vedeutlichung, und bei Klick auf den Zeilenkopf das ganze wieder zurückgesetzt wird.
OK, danke für die Aufklärung, war aber trotzdem interessant und lehrreich :-)
Gruss Rainer

Anzeige
AW: zeilenhöhe per klick auf zeilenkopf verändern
20.07.2007 01:49:13
kekno
vielen dank an alle, die sich die mühe gemacht haben!
ich bin begeistert über die zugegangenen lösungsvarianten. ich werde alles durchtesten, sobald ich ein wenig weniger müde bin. gruß an alle nachtschwärmer!
kekno
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

Zeilenhöhe per Klick auf den Zeilenkopf verändern


Schritt-für-Schritt-Anleitung

Um die Zeilenhöhe per Klick auf den Zeilenkopf in Excel zu verändern, kannst Du den folgenden VBA-Code nutzen. Dieser Code verdoppelt die Höhe der Zeile, wenn Du auf den Zeilenkopf klickst, und stellt sie wieder her, wenn Du erneut darauf klickst.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Wähle im Projektfenster das entsprechende Arbeitsblatt aus, in dem Du die Funktion implementieren möchtest.
  3. Füge den folgenden Code in das Klassenmodul ein:
Option Explicit
Dim oldRow As Long
Dim oldHeight As Double
Const myRH As Double = 2 ' Verdopplung der Zeilenhöhe

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Cells.Count = 1 Then
        If oldRow = Target.Row Then
            Rows(Target.Row).RowHeight = oldHeight
            oldRow = 0
        Else
            If oldRow <> 0 Then
                Rows(oldRow).RowHeight = oldHeight
            End If
            oldRow = Target.Row
            oldHeight = Rows(Target.Row).RowHeight
            Rows(Target.Row).RowHeight = oldHeight * myRH
        End If
    End If
End Sub
  1. Schließe den VBA-Editor und kehre zu Excel zurück.
  2. Teste die Funktion, indem Du auf den Zeilenkopf klickst. Die Zeilenhöhe sollte sich entsprechend ändern.

Häufige Fehler und Lösungen

  • Fehler: Das Makro wird nicht ausgeführt.

    • Stelle sicher, dass Makros in den Excel-Optionen aktiviert sind.
  • Fehler: Die Zeilenhöhe ändert sich nicht.

    • Überprüfe, ob der Code im richtigen Arbeitsblattmodul eingefügt wurde.
  • Fehler: Die Zeilenhöhe wird nicht zurückgesetzt.

    • Achte darauf, dass Du nur auf eine einzelne Zeile klickst. Bei Auswahl mehrerer Zellen funktioniert die Rücksetzung nicht.

Alternative Methoden

Wenn Du die Zeilenhöhe für alle Zeilen gleich groß machen möchtest, kannst Du dies ebenfalls tun, ohne VBA zu verwenden:

  1. Markiere die gewünschten Zeilen, indem Du auf die Zeilenköpfe klickst.
  2. Klicke mit der rechten Maustaste und wähle „Zeilenhöhe“ aus dem Kontextmenü.
  3. Gib die gewünschte Höhe ein und klicke auf „OK“.

Zusätzlich kannst Du die Funktion „Format“ im Menüband nutzen, um die Zellengröße in Excel zu ändern.


Praktische Beispiele

Angenommen, Du hast eine Tabelle mit langen Texten in den Zellen. Um sicherzustellen, dass diese Texte sichtbar sind, kannst Du die einzelnen Zellen vergrößern. Hier ist ein Beispiel:

  1. Wähle die Zelle oder den Zellbereich aus, den Du vergrößern möchtest.
  2. Klicke mit der rechten Maustaste und wähle „Zellen formatieren“.
  3. Gehe zum Reiter „Ausrichtung“ und aktiviere das Kontrollkästchen „Zeilenumbruch“.
  4. Klicke auf „OK“. Jetzt wird der Text je nach Inhalt der Zelle automatisch umgebrochen.

Tipps für Profis

  • Nutze die Funktion „Format übertragen“, um die Zellengröße von einer Zelle auf eine andere zu übertragen.
  • Experimentiere mit der Minimale Zeilenhöhe, um sicherzustellen, dass alle Inhalte sichtbar sind.
  • Wenn Du regelmäßig mit Bildern in Zellen arbeitest, kannst Du den Code anpassen, um Bilder in Zellen einzufügen und sie bei Klick zu vergrößern.

FAQ: Häufige Fragen

1. Wie kann ich nur eine Zelle in Excel vergrößern?
Um nur eine Zelle zu vergrößern, wähle die Zelle aus, klicke mit der rechten Maustaste und wähle „Zellen formatieren“. Unter dem Reiter „Ausrichtung“ kannst Du die Höhe anpassen.

2. Kann ich die Zeilenhöhe für alle Zeilen gleichzeitig ändern?
Ja, markiere einfach alle Zeilen, klicke mit der rechten Maustaste auf einen der Zeilenköpfe und wähle „Zeilenhöhe“, um eine einheitliche Höhe für alle zu setzen.

3. Wie kann ich ein Bild in eine Zelle einfügen und bei Klick vergrößern?
Du kannst ein Bild in eine Zelle einfügen, indem Du die Zelle auswählst und dann über „Einfügen“ > „Bilder“ das gewünschte Bild auswählst. Um es bei Klick zu vergrößern, benötigst Du einen VBA-Code, der das Bild bei Auswahl vergrößert.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige