Registriert seit: 08.12.2016
Version(en): 2013
04.01.2017, 15:46
(Dieser Beitrag wurde zuletzt bearbeitet: 04.01.2017, 15: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
Grüße,
Winny
Registriert seit: 20.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, 16:48
(Dieser Beitrag wurde zuletzt bearbeitet: 04.01.2017, 16: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, 14:57
(Dieser Beitrag wurde zuletzt bearbeitet: 31.01.2017, 15: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.
________________________________________________________________________
wer aufgibt, ohne es versucht zu haben, gibt einfach nur auf!
Grüße aus Norderstedt, Peter
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
|