Auto dopasowanie wysokości do tekstu komórek scalonych
by vbatools on May.20, 2011, under Excel, Porady
Excel posiada możliwość scalenia komórek, jednakże nie radzi sobie z ich zarządzaniem. W przypadku jednej komórki jest to prosta sprawa. Funkcja auto dopasowania wysokości, szerokości, zawijania tekstu jest elementarna ale dla kilka cell zagregowanych razem jest już problem.
Poniższa procedura umieszczona w module arkusza np: Arkusz1 pozwoli na automatyczne dobranie wysokości komórek do tekstu. Oczywiście ważną rolę odbiera tutaj rodzaj czcionki. Przydatne jest to głównie w przypadku tekstu, opisującego pola arkusza dla różnego rodzaju formularzy Excelowych.
Private Sub Worksheet_Change(ByVal Target As Range) 'Mod by MVP OShon from VBATools.pl Dim NewRwHt As Single Dim cWdth As Single, MrgeWdth As Single Dim c As Range, cc As Range Dim ma As Range, wysokosc As Currency With Target wysokosc = .RowHeight If .MergeCells And .WrapText Then Set c = Target.Cells(1, 1) cWdth = c.ColumnWidth Set ma = c.MergeArea For Each cc In ma.Cells MrgeWdth = MrgeWdth + cc.ColumnWidth Next If wysokosc > c.RowHeight Then Exit Sub Application.ScreenUpdating = False ma.MergeCells = False c.ColumnWidth = MrgeWdth c.EntireRow.AutoFit NewRwHt = c.RowHeight c.ColumnWidth = cWdth ma.MergeCells = True If NewRwHt > wysokosc Then ma.RowHeight = NewRwHt Else ma.RowHeight = wysokosc End If cWdth = 0: MrgeWdth = 0 Application.ScreenUpdating = True End If End With End Sub
(c) Shon Oskar – www.VBATools.pl
Wszelkie prawa zastrzeżone. Żadna część ani całość tego artykułu nie może być powielana ani publikowana bez zgody autora.
December 16th, 2015 on 09:55
Bardzo fajna procedura!
Zmieniłbym tylko warunek
If NewRwHt > wysokosc Then
ma.RowHeight = NewRwHt
Else
ma.RowHeight = wysokosc
End If
na
If NewRwHt wysokosc Then
ma.RowHeight = NewRwHt
Else
ma.RowHeight = wysokosc
End If
wtedy korekta wysokości wiersza działac będzie w obie strony.
December 16th, 2015 on 11:03
Dzięki za komentarz zostanie dla potomnych. Mam rozumieć ze chodziło o dodatkowy warunek ze znakiem mniejszości “<". Pozdrawiam zatem.
January 18th, 2016 on 12:58
Witam,
nie jestem pewny czy robię wszystko dobrze. Nie znam się na tym. Pierwszy raz próbuję zastosować makro.
wywołuję VBA przez ALT+ F11 klikam na ThisWorkbook przeklejam kod który podaliście powyżej. Zapisuję jako .xlsm. Nic się nie zmienia.
Chciałbym żeby wysokość wiersza scalonych komórek dostosowywała się automatycznie do zawartości tekstu.
czy coś pominąłem, albo powinienem zrobić inaczej ?
January 18th, 2016 on 13:35
Procedura działa w zakresie wykonywania czynności. Czyli dopasowuje na bieżąco, a nie szuka gdzie dopasować w obszarze arkusza gdzie nie realizujemy żadnych zmian.
March 18th, 2017 on 19:43
Cześć, bardzo podoba mi się idea takiego makra. Pytanie: jak można wykorzystać je do ogólnego użytku? Czy można je wkleić do pliku PERSONAL?
March 18th, 2017 on 20:28
Niestety nie. Jest to procedura zdarzeniowa, która realizuje czynności na aktywnym arkuszu, a więc kod musi być przyklejony do pliku docelowego.
May 5th, 2018 on 18:19
Dzięki za rozwiązanie. Po raz drugi odwołałem się do niego. Pozdrawiam.
February 5th, 2020 on 12:48
W excel2007 Twoje rozwiązanie działa tylko gdy się kliknie 2x w komórki scalone (tak aby je wyedytować) wtedy wyświetla się cały text w komórkach i wtedy autodopasowanie działa.
Używająć funkcji autodopasowanie wysokości wierszy kod nie działa.
Nie znam się na VBA ale czy można coś takiego zrobić w automacie dla kilku scalonych i zawijanych komórek
w kilku wierszach?
February 5th, 2020 on 18:38
Ta procedura jest oparta na zdarzeniu, a wiec kiedy użytkownik edytuje arkusz tworząc w nim treść jest stosowane dopasowanie wszystkości. W takim przypadku działa poprawnie i tak została zaprojektowana. Nie jest to procedura naprawiania już istniejącego tekstu.
March 4th, 2021 on 17:32
Witam,
1.Czy makro można zmienić tak, aby odnosiło się do jednej konkretnej scalonej komórki?
2. Czy można wpłynąć jakość na wysokość wierszy, np. 80% aktualnie ustawianych?
March 4th, 2021 on 17:45
Krzysztof, kod jaki zaproponowałem możesz interpretować dowolnie. Prześledź jego polecenia aby wiedzieć, które zmienne możesz pomniejszyć o 20%, oraz jakim parametrem się kierować aby podać zakres na którym będzie działać kod.
August 12th, 2021 on 10:25
Dzięki za przedstawienie formuły. Zastosowaliśmy ją do odpowiedniego sformatowania dokumentu i pojawił się problem, że w zależności od objętości tekstu w scalonych komórkach albo wysokość wychodziła idealnie na “0”, albo pojawiał się odstęp i wysokość obszar była większa niż zajmowanego tekstu.
Nie wyglądało to “ładnie” na wydruku.
Do formuły “MrgeWdth = MrgeWdth + cc.ColumnWidth” dodaliśmy +1 (” MrgeWdth = MrgeWdth + cc.ColumnWidth + 1″) i po testach widzimy, że chyba zaczęło działać, bo każdy obszar dopasowywany jest idealnie do wysokości tekstu bez dodawania wspomnianego wyżej odstępu.