fireless
Goto Top

Makro automatisch ausführen bei Zellenänderung VBA

Hallo Community,

ich habe ein Makro, dass mir automatisch die Zeilenhöhe mit Zeilenumbruch anpasst, wenn der Text zu lang ist (es wirkt auf das ganze Tabellenblatt aber mir geht es hauptsächlich um die verbundenen Zellen "D31:M31").
Dies passt auch soweit wenn ich das Makro nach Eingabe des geänderten Textes ausführe.

Nun benötige ich noch, dass das Makro automatisch ausgeführt wird, sobald sich der Text in der Zelle ändert. "Nehmen wir an da steht "hallo" und ich schreibe nun "hallo hans" hinein (natürlich viel länger, damit der Umbruch stattfindet).

Leider funktioniert es nicht mittels VBA, wenn ich den Text ändere.. Weiß jemand rat was ich falsch mache?

Danke für jeden Hinweis !!!


VBA in Tabelle1:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("$D$31:$M$31")) Is Nothing Then Zellenanpassen
End Sub

Und hier das Makro:

Sub Zellenanpassen()
Dim CurrentRowHeight As Single, MergedCellRgWidth As Single
Dim CurrCell As Range
Dim ActiveCellWidth As Single, PossNewRowHeight As Single
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 Sub


VG
fireless

P.S.: Meine VBA Kenntnisse sind eher mau.. von daher nicht böse sein face-wink

Content-Key: 252514

Url: https://administrator.de/contentid/252514

Printed on: April 20, 2024 at 00:04 o'clock

Mitglied: 114757
114757 Oct 20, 2014 updated at 14:24:26 (UTC)
Goto Top
Zitat von @fireless:
If Not Intersect(Target, Range("$D$31:$M$31§)) Is Nothing Then Zellenanpassen
Das Paragraphenzeichen (§) sollte da eigentlich ein Anführungszeichen sein face-wink

Gruß
jodel32
Member: fireless
fireless Oct 20, 2014 at 15:19:25 (UTC)
Goto Top
Ja stimmt, sorry. Ich habe mich hier vertippt.. Leider ist der Code auch mit mit den anführungszeichen nicht richtig bzw funktioniert nicht ...

Gruß
fireless
Mitglied: 114757
114757 Oct 21, 2014 at 12:44:06 (UTC)
Goto Top
ungefähr so:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("$D$31:$M$31")) Is Nothing Then  
        For Each cell In Target
            If cell.Value <> "" Then  
                Zellenanpassen Target
            End If
        Next
    End If
End Sub

Sub Zellenanpassen(ByVal rngTarget As Range)
    Dim CurrentRowHeight As Single, MergedCellRgWidth As Single
    Dim CurrCell As Range
    Dim ActiveCellWidth As Single, PossNewRowHeight As Single
    If rngTarget.MergeCells Then
        With rngTarget.MergeArea
            If .Rows.Count = 1 And .WrapText = True Then
                Application.ScreenUpdating = False
                CurrentRowHeight = .RowHeight
                ActiveCellWidth = rngTarget.ColumnWidth
                For Each CurrCell In rngTarget
                    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)
                Application.ScreenUpdating = True
            End If
        End With
    End If
End Sub
Member: fireless
fireless Oct 21, 2014 updated at 17:57:41 (UTC)
Goto Top
Hi jodel32,

super!!! Vielen Dank für deine Hilfe! Das funktioniert nun soweit super ! face-smile)

Nun noch eine kurze Frage, irgendwie werden verdammt viele Absätze mit eingefügt, ist das normal? Wenn ich die Zeilenhöhe auf "1" stelle, und jetzt ganz viele "OOOO"'s eingebe, bis ich in der Dritten (Neu hinzugefügten Zeile) bin, dann werden sehr viele Absätze eingefügt.

Weißt du dazu auch eine Antwort?

Danke und Gruß

fireless

Edit: Mir ist aufgefallen, dass dementsprechend immer ein neuer leerer Absatz eingefügt wird, wenn ein neues Wort z.B. eingegeben wurde.. Ich wollte eigentlich erreichen, dass wenn der eingegebene Text die Zeile M31 erreicht hat und dann ein Umbruch stattfindet, dass dann die Zeilenhöhe automatisch angepasst wird.. Ist das machbar mit Excel?