Spaltenbreite per Makro anpassen
#1
Hallo zusammen,

ich habe folgende Tabelle: in der Zelle A1 wähle ich per DropDown Liste einen Monat aus, in der Zelle C1 und D1 berechnet sich dann abhängig von A1 ein Umsatz und ein Vorjahresumsatz.

Ich möchte nun ein Makro, welches dafür sorgt, dass bei jedem Neuauswählen in der Dropdown Liste die Spaltenbreite von C und D automatisch angepasst werden.

Ich habe es selbst bereits mit folgendem Makro versucht, aber das Problem ist, dass man das immer wieder ausführen muss, es passt sich leider nicht automatisch an:
Code:
Sub SpaltenbreiteAutomatischFestlegen()
Columns("C:D").EntireColumn.AutoFit
End Sub

VG,
Andi
Top
#2
Hi
Nutze das Change Event, die Sub kommt in den Codeteil deines Tabellenblattes

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Address(0, 0) = "A1" Then
      Columns("C:D").AutoFit
   End If
End Sub
Top
#3
Hallo Andy,

Makros müssen immer von aussen aufgerufen werden.

Für solche Fälle wie du beschrieben hast, hat Excel aber Ereignismakros eingerichtet.
Falls Excel für ein definiertes Ereignis ein Makro mit dem zugehörigen Namen im richtigen Modul findet, wird dieses Makro ausgeführt ohne dass der Benutzer es explicit aufrufen muss.

In deinem Beispiel könnte man die Anpassung der Spaltenbreite entweder in ein
Worksheet.Change Makro (wenn Zellen im Arbeitsblatt durch den Benutzer oder durch einen externen Link geändert werden) oder in ein
Worksheet.Calculate Makro (wenn Zellen während einer Neuberechnung geändert werden) einbauen.

zB.
Code:
Private Sub Worksheet_Change(ByVal Target as Range)
Columns("C:D").EntireColumn.AutoFit
End Sub

Dieses Makro muss in das Objektmodul des entsprechenden Arbeitsblattes eingetragen werden.
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





Top
#4
Vielen Dank,

ich habe mal die Lösung von Winny ausprobiert, und es funktioniert.
Anstatt der Zelle A1 spreche ich in meiner Originaldatei eine verbundene Zelle an, aber das funktioniert auch soweit ich das sehe.
Danke !
Top
#5
Hi Andi,

bei diesem Satz

Zitat:Anstatt der Zelle A1 spreche ich in meiner Originaldatei eine verbundene Zelle an, aber das funktioniert auch soweit ich das sehe.

sind bei mir ein paar Alarmglocken losgegangen. Wenn bei dir alles passt, ist es ja ok, du solltest dir aber zum Thema "Verbundene Zellen" interessehalber diesen Beitrag durchlesen: http://www.clever-excel-forum.de/thread-142.html
Gruß Günter
Jeder Fehler erscheint unglaublich dumm, wenn andere ihn begehen.
angebl. von Georg Christoph Lichtenberg (1742-1799)
Top
#6
Gibt es auch eine Möglichkeit, dass nur die sichtbaren Zellen in der Breite angepasst werden? Das Makro, das ich verwende spricht jetzt alle Spalten von E bis AF an.
Es sind aber einige Spalten mit Gruppierungen versehen. Diese klappen sich dann bei jedem ausführen des Makros auf.
WIe kann ich dies verhindern?

Hier mein aktueller Code:
Code:
Sub SpaltenbreiteAutomatischFestlegen()
Columns("D:AF").EntireColumn.AutoFit
End Sub


Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Address(0, 0) = "D3" Then
     Columns("D:AF").AutoFit
  End If
End Sub
Top
#7
Hallo,

Zitat:Gibt es auch eine Möglichkeit, dass nur die sichtbaren Zellen in der Breite angepasst werden?

wenn ich Dich richtig verstanden habe, so geht das meines Wissens nicht. Du kannst nicht unterschiedliche Breiten
in einer Spalte haben. Was stört Dich eigentlich daran, daß die Spalte bei eingeblendeten Zellen genau so breit ist,
wie die ausgeblendeten? Du siehst die ausgeblendeten Zellen, ich nehme einfachheitshalber an, daß da Zeilen
ausgeblendet sind, ja eh nicht. Sie sind ja ausgeblendet, also nicht sichtbar.

Insofern kann ich auch den Sinn des Vorhabens nicht wirklich erkennen. Du darfst mich aber gerne schlau machen.
Top
#8
Hallo,

so, dann nur sichtbare Zellen angepasst werden sollen:


Code:
Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Address(0, 0) = "D3" Then
   With Columns("D:AF").SpecialCells(12)
     .EntireColumn.AutoFit
   End With
 End If
End Sub


Hi Peter,

das soll nicht innerhalb einer Spalte sonder eines Bereiches passieren.
Gruß Atilla
[-] Folgende(r) 1 Nutzer sagt Danke an atilla für diesen Beitrag:
  • Käpt'n Blaubär
Top
#9
Hi Atilla!
Einerseits moserst Du über manch kryptischen Code von snb, benutzt hier aber die mehr als kryptische SpecialCells-Enumeration der XlCellType-Konstanten.  :21:
Das Problem in diesem speziellen Fall ist ja, dass als Wert (2. Parameter) eine Addition der Konstanten übergeben werden kann, dann fehlt der Überblick nahezu komplett.
Ich für meinen Teil nehme lieber xlCellTypeVisible als 12, erkenne ich dies auch später noch korrekt.

Aber genug des off topic,
only two cents,

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
#10
Hallo ralf,

ein paar mehr Cent und ich folge Dir. :19: 

Nee, hast recht, für das Verständnis, auch wenn man nicht so oft damit zu tun ha, beim späteren drüberschauen, erkennt man dann sofort, was da los ist.
Gruß Atilla
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste