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
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
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.
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 !
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
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
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.
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.
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
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.