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-ID: 252514

Url: https://administrator.de/forum/makro-automatisch-ausfuehren-bei-zellenaenderung-vba-252514.html

Ausgedruckt am: 23.12.2024 um 12:12 Uhr

114757
114757 20.10.2014 aktualisiert um 16:24:26 Uhr
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
fireless
fireless 20.10.2014 um 17:19:25 Uhr
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
114757
114757 21.10.2014 um 14:44:06 Uhr
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
fireless
fireless 21.10.2014 aktualisiert um 19:57:41 Uhr
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?