121 Aufrufe
Gefragt in Tabellenkalkulation von jelena Mitglied (891 Punkte)
Hallo guten Tag, kann mir bitte jemand ein Makro für Excel schreiben. Spaltenbreite von C12:C29 mindestbeite 32 und breiter, wenn Text länger. Spaltenbreite von D12:D29 mindestbeite 21 und breiter, wenn Text länger. Spaltenbreite von E12:E29 mindestbeite 36 und breiter, wenn Text länger. Danke

6 Antworten

0 Punkte
Beantwortet von xlking Experte (1.8k Punkte)

Hi Jelena, meinst du das so? Das Makro komm ins entsprechende Tabellenmodul.

Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect(Target, Range("C12:C29")) Is Nothing Then
    Target.EntireColumn.AutoFit
    If Target.EntireColumn.ColumnWidth < 32 Then Target.EntireColumn.ColumnWidth = 32
  ElseIf Not Intersect(Target, Range("D12:D29")) Is Nothing Then
    Target.EntireColumn.AutoFit
    If Target.EntireColumn.ColumnWidth < 21 Then Target.EntireColumn.ColumnWidth = 21
  ElseIf Not Intersect(Target, Range("E12:E29")) Is Nothing Then
    Target.EntireColumn.AutoFit
    If Target.EntireColumn.ColumnWidth < 36 Then Target.EntireColumn.ColumnWidth = 36
  End If
End Sub

Gruß Mr. K.

0 Punkte
Beantwortet von jelena Mitglied (891 Punkte)
Bearbeitet von jelena

Hallo Mr. K. Das Makro soll nur diese Zellen betreffen, dieses Makro macht alle Spalten von A bis V und nicht nur von C12 bis E29. Danke 

Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect(Target, Range("C12:C29")) Is Nothing Then
    Target.EntireColumn.AutoFit
    If Target.EntireColumn.ColumnWidth < 32 Then Target.EntireColumn.ColumnWidth = 32
  ElseIf Not Intersect(Target, Range("D12:D29")) Is Nothing Then
    Target.EntireColumn.AutoFit
    If Target.EntireColumn.ColumnWidth < 21 Then Target.EntireColumn.ColumnWidth = 21
  ElseIf Not Intersect(Target, Range("E12:E29")) Is Nothing Then
    Target.EntireColumn.AutoFit
    If Target.EntireColumn.ColumnWidth < 36 Then Target.EntireColumn.ColumnWidth = 36
  End If
End Sub
0 Punkte
Beantwortet von xlking Experte (1.8k Punkte)
Hi Jelena,

kann es sein, dass du in deiner Tabelle verbundene Zellen hast? Denn das Makro ist so aufgebaut, dass es wirklich nur die Spalten C, D und E betrifft. Nicht A:V und auch die Zellangaben siehst du im Code.

Nimm den Zellverbund raus, dann sollte es funktionieren.

Gruß Mr. K.
0 Punkte
Beantwortet von jelena Mitglied (891 Punkte)
Hallo Mr. K. von Zeile C12 bis E29 gibt es keine verbundenen Zellen, in Zeile C32 usw. jedoch schon da ich die so brauche. Danke
0 Punkte
Beantwortet von xlking Experte (1.8k Punkte)

Wozu brauchst du verbundene Zellen? Meistens doch nur um etwas über mehrere Spalten zu zentrieren. Das kannst du auch über Zellen formatieren -> Textauswahl -> über Auswahl zentrieren erreichen.

Du kannst nicht die Spaltenbreite einzelner Zellen anpassen. Das geht nur für die gesamte Spalte. Welche Excel-Version hast du nochmal? In manchen Versionen wird bei verbundenen Zellen mit EntireColumn nicht die einzelne Spalte sondern der gesamte Spaltenbereich von verbundenen Zellen ausgewählt. Bei mir in Excel 2019 funktioniert der Code oben auch mit verbundenen Zellen einwandfrei.

Probiers mal so mit dem leicht abgewandelten Code für deine Version:

Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect(Target, Range("C12:C29")) Is Nothing Then
    Columns(Target.Column).AutoFit
    If Columns(Target.Column).ColumnWidth < 32 Then Columns(Target.Column).ColumnWidth = 32
  ElseIf Not Intersect(Target, Range("D12:D29")) Is Nothing Then
    Columns(Target.Column).AutoFit
    If Columns(Target.Column).ColumnWidth < 21 Then Columns(Target.Column).ColumnWidth = 21
  ElseIf Not Intersect(Target, Range("E12:E29")) Is Nothing Then
    Columns(Target.Column).AutoFit
    If Columns(Target.Column).ColumnWidth < 36 Then Columns(Target.Column).ColumnWidth = 36
  End If
End Sub

Gruß Mr. K.

0 Punkte
Beantwortet von jelena Mitglied (891 Punkte)
Hallo Mr. K. ich benutze Office 365, der leicht abgewandelte Code nimmt auch alle Spalten, ich dachte vielleicht kann man nur bestimmte Bereiche eintragen. Danke
...