Registriert seit: 08.12.2016
Version(en): 2013
04.01.2017, 16:46
(Dieser Beitrag wurde zuletzt bearbeitet: 04.01.2017, 16:46 von Hecklinger.)
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
Registriert seit: 30.01.2015
Version(en): 2013
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
Registriert seit: 21.06.2016
Version(en): 2021
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.
Registriert seit: 08.12.2016
Version(en): 2013
04.01.2017, 17:48
(Dieser Beitrag wurde zuletzt bearbeitet: 04.01.2017, 17:48 von Hecklinger.)
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 !
Registriert seit: 10.04.2014
Version(en): Microsoft 365, mtl. Kanal
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)
Registriert seit: 08.12.2016
Version(en): 2013
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
Registriert seit: 11.04.2014
Version(en): '97 bis 2016; 365
31.01.2017, 15:57
(Dieser Beitrag wurde zuletzt bearbeitet: 31.01.2017, 16:00 von Käpt'n Blaubär.)
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.
Registriert seit: 14.04.2014
Version(en): 2003, 2007
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
Registriert seit: 12.10.2014
Version(en): 365 Insider (32 Bit)
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)
Registriert seit: 14.04.2014
Version(en): 2003, 2007
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
|