Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
800to804
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
800to804
800to804
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Makro funktioniert nur nach manueller Anwahl

Makro funktioniert nur nach manueller Anwahl
19.09.2006 13:36:51
Gesa
Hallo,
habe folgendes Makro im Archiv (Automatische Zeilenhöhe bei verbundenen Zellen)
gefunden:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim CurrentRowHeight As Single, MergedCellRgWidth As Single
Dim CurrCell As Range
Dim ActiveCellWidth As Single, PossNewRowHeight As Single
If ActiveCell.Row > 11 And ActiveCell.Row < 19 Then
If ActiveCell.MergeCells Then
With ActiveCell.MergeArea
If .Rows.Count = 1 And .WrapText = True Then
Application.ScreenUpdating = False
CurrentRowHeight = .RowHeight
ActiveCellWidth = ActiveCell.ColumnWidth
For Each CurrCell In Selection
MergedCellRgWidth = CurrCell.ColumnWidth + MergedCellRgWidth
Next
.MergeCells = False
.Cells(1).ColumnWidth = MergedCellRgWidth
.EntireRow.AutoFit
PossNewRowHeight = .RowHeight
.Cells(1).ColumnWidth = ActiveCellWidth
.MergeCells = True
.RowHeight = IIf(CurrentRowHeight > PossNewRowHeight, _
CurrentRowHeight, PossNewRowHeight)
End If
End With
End If
End If
Application.ScreenUpdating = True
End Sub

Dieses funktioniert allerdings nur, wenn ich dieses wie nachfolgend aufgeführt ändere und manuell über das Menü: einfüge und manuell aus der betreffenden Zeile ausführe:
Sub test()
Dim CurrentRowHeight As Single, MergedCellRgWidth As Single
Dim CurrCell As Range
Dim ActiveCellWidth As Single, PossNewRowHeight As Single
If ActiveCell.Row > 11 And ActiveCell.Row If ActiveCell.MergeCells Then
With ActiveCell.MergeArea
If .Rows.Count = 1 And .WrapText = True Then
Application.ScreenUpdating = False
CurrentRowHeight = .RowHeight
ActiveCellWidth = ActiveCell.ColumnWidth
For Each CurrCell In Selection
MergedCellRgWidth = CurrCell.ColumnWidth + MergedCellRgWidth
Next
.MergeCells = False
.Cells(1).ColumnWidth = MergedCellRgWidth
.EntireRow.AutoFit
PossNewRowHeight = .RowHeight
.Cells(1).ColumnWidth = ActiveCellWidth
.MergeCells = True
.RowHeight = IIf(CurrentRowHeight > PossNewRowHeight, _
CurrentRowHeight, PossNewRowHeight)
End If
End With
End If
End If
Application.ScreenUpdating = True
End Sub
Mein Ziel ist es (da mit verwendeten Steuerelementen die Dateigröße sich zu sehr vergrößert - siehe meine alten Beitrag "Absturz bei ActivX-Steuerelementen"), dass sich verbundene Zeilen automatisch nach Eingabe eines Wertes in der Größe anpassen (vergrößern & verkleinern beim löschen von eingegebenen Werten).
Wäre sehr dankbar, wenn mir jemand hilft... dieses Problem scheint unlösbar :-(
Schöne Grüße Gesa S.

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro funktioniert nur nach manueller Anwahl
19.09.2006 14:12:12
Andi
Hi,
ich nehme an, Du hast das Makro in einem Standard-Modul, oder?
Du musst es ins Modul der betreffenden Tabelle kopieren.
Schönen Gruß,
Andi
AW: Makro funktioniert nur nach manueller Anwahl
19.09.2006 14:27:07
Gesa
Hallo Andi,
Sorry, weiß nicht so recht, was "Standard-Modul" bedeutete.
Habe die entsprechende Datei geöffnet, dass zu bearbeitende Tabellenblatt ausgewählt und auf dem Tabellenblattnamen mit rechter Maustaste über Code anzeigen das Makro eingefügt. Datei gespeichert - wieder geöffnet.
Wie gesagt angezeigt wird es, wenn ich aber über das Button ausführen gehe, öffnet sich die Maske "Makro auswählen" ... (drei große ?) und weiter funktioniert nichts.
Kannst Du helfen?
Schöne Grüße
Gesa S.
Anzeige
AW: Makro funktioniert nur nach manueller Anwahl
19.09.2006 15:41:54
Klaus
Hallo,
in das Klassenmodul der Tabelle (Rechtsklick auf Register, Code anzeigen)

Private Sub Worksheet_Change(ByVal Target As Range)
Dim CurrentRowHeight As Single, MergedCellRgWidth As Single
Dim CurrCell As Range
Dim ActiveCellWidth As Single, PossNewRowHeight As Single
If Target.Row > 11 And Rng.Row < 19 Then
If Target.MergeCells Then
With Target.MergeArea
If .Rows.Count = 1 And .WrapText = True Then
Application.ScreenUpdating = False
CurrentRowHeight = .RowHeight
ActiveCellWidth = ActiveCell.ColumnWidth
For Each CurrCell In Selection
MergedCellRgWidth = CurrCell.ColumnWidth + MergedCellRgWidth
Next
.MergeCells = False
.Cells(1).ColumnWidth = MergedCellRgWidth
.EntireRow.AutoFit
PossNewRowHeight = .RowHeight
.Cells(1).ColumnWidth = ActiveCellWidth
.MergeCells = True
.RowHeight = IIf(CurrentRowHeight > PossNewRowHeight, _
CurrentRowHeight, PossNewRowHeight)
End If
End With
End If
End If
Application.ScreenUpdating = True
End Sub

Gruß
Klaus
Anzeige
AW: Makro funktioniert nur nach manueller Anwahl
19.09.2006 15:51:38
Gesa
Hallo Klaus,
jetzt rührt sich was :-)
Allerdings erscheint jetzt die Fehlermeldung:
"Laufzeitfehler 424 - Objekt erforderlich"
Beim Debuggen wird: If Target.Row > 11 And Rng.Row gelb hinterlegt.
Was bedeutet dies wohl?
Vielen Dank und schöne Grüße
Gesa S.
AW: Makro funktioniert nur nach manueller Anwahl
19.09.2006 16:42:43
Klaus
Hallo,
mein Fehler.
Ersetze Rng durch Target.
Gruß
Klaus
AW: Makro funktioniert nur nach manueller Anwahl
20.09.2006 09:58:19
Gesa
Hallo Klaus,
vorab ein groß geschriebenes DANKESCHÖN für die Unterstützung - echt beneidenswert wie Du da durchsteigst.
Habe wie in Deiner letzten Nachricht rng durch Target ersetzt - jetzt passiert nichts mehr :-(
Vielleicht könntest Du noch einmal nachsehen.
Vielen Dank vorab und schöne Grüße
Gesa S.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim CurrentRowHeight As Single, MergedCellRgWidth As Single
Dim CurrCell As Range
Dim ActiveCellWidth As Single, PossNewRowHeight As Single
If Target.Row > 11 And Target.Row < 19 Then
If Target.MergeCells Then
With Target.MergeArea
If .Rows.Count = 1 And .WrapText = True Then
Application.ScreenUpdating = False
CurrentRowHeight = .RowHeight
ActiveCellWidth = ActiveCell.ColumnWidth
For Each CurrCell In Selection
MergedCellRgWidth = CurrCell.ColumnWidth + MergedCellRgWidth
Next
.MergeCells = False
.Cells(1).ColumnWidth = MergedCellRgWidth
.EntireRow.AutoFit
PossNewRowHeight = .RowHeight
.Cells(1).ColumnWidth = ActiveCellWidth
.MergeCells = True
.RowHeight = IIf(CurrentRowHeight > PossNewRowHeight, _
CurrentRowHeight, PossNewRowHeight)
End If
End With
End If
End If
Application.ScreenUpdating = True
End Sub

Anzeige
AW: Makro funktioniert nur nach manueller Anwahl
21.09.2006 11:26:11
Andi
Hi,
das is aber schon merkwürdig, dass da nix passiert;
Du bist aber schon sicher, dass Du in den Zeilen 12 bis 18 arbeitest? Sonst is klar, dass sich nix rührt...
Schönen Gruß,
Andi
AW: Makro funktioniert nur nach manueller Anwahl
21.09.2006 12:22:45
Gesa
Hallo Andi,
ups :-( so ist das mit Leuten, die keine Ahnung haben.
Vielen Dank für den Tip
Jetzt funktioniert es. Gibt es auch eine Möglichkeit, die Zeile nach Eingabe wieder zu verkleinern (wenn ich jetzt was entferne wo z. B. 5 Zeilen waren und dann nur
noch 3 bleibt die gleiche Höhe bestehen)?
Schöne Grüße
Gesa S.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige