[easy_youtube_gallery id=uMK0prafzw0,8Uee_mcxvrw,HcXNPI-IPPM,JvMXVHVr72A,AIXUgtNC4Kc,K8nrF5aXPlQ,cegdR0GiJl4,L-wpS49KN00,KbW9JqM7vho ar=16_9 cols=3 thumbnail=hqdefault controls=0 playsinline=1 privacy=1 title=top wall=1 class=mySuperClass]
Först publicerad: 2010-07-01

Autofit och felaktig radhöjd i Excel 2007

I och med framtagandet av en större Excelmodell som inkluderade makron så stötte jag på en ganska jobbig bugg i Excel 2007. Buggen i fråga har med Autofit och radhöjd att göra.

Om du presenterar mycket text i en cell, och samtidigt justerar cellformatet till Wrap text (dvs att texten skall bryta till nya rader allt eftersom) så finns det en risk att Excels automatiska justering av radhöjd (Autofit) ger för liten radhöjd. Effekten blir att den sista raden/raderna inte är fullt synliga.

Felaktig automatisk justering av radhöjd i Excel 2007.
Exempel på felaktig automatisk justering av radhöjd i Excel 2007.

 

Problemet uppstod i och med import av text från CSV-filer, men jag har även “lyckats” återskapa felet direkt i kalkylbladet. Emellertid så är förekomsten inte konsekvent – ibland fungerar Autofit som det ska, andra gånger inte.

Projeketet som jag höll på med handlade just om att presentera större mängder text i diverse arbetsblad, så jag var tvungen att finna en lösning. Problemet finns i och för sig beskrivet i flera artiklar, men jag lyckades inte finna någon existerande lösning på denna bugg.

Nedan kan du se mitt försök till lösning av problemet med otillräcklig justering av radhöjder i Excel. Makrot loopar igenom aktuella rader och ökar samtliga raders radhöjd med 20. I fall en radhöjd redan är 409, dvs den maxhöjd som Excel 2007 tillåter, så drar vi först ned höjden till 389 för att sedan öka med 20 tillbaks till 409.

Vidare så hanteras alla rader ned till den sist använda raden i kolumn E, något som enkelt ändras direkt i VBA-rutinen nedan (lonSistaRad).

Sub RadHojd()
 
Sub Justeraradhojd()
 
Dim lonSistaRad As Long
lonSistaRad = Columns("E:E").Range("A65536").End(xlUp).Row
 
For i = 1 To lonSistaRad '1 = rad 1, ändra till önskad startrad
Rows(i).EntireRow.AutoFit
 If Rows(i).RowHeight > 409 Then Rows(i).RowHeight = 389
  Rows(i).RowHeight = Rows(i).RowHeight + 20
Next i
End Sub

Ovantående lösning är ett praktiskt exempel på hur man tvingas uppfinna lösningar för att komma runt de buggar som alltid funnits i Excel liksom i de flesta andra datorprogram.