13. marts 2006 - 11:09Der er
5 kommentarer og 1 løsning
Autofitting af samtlige rækker med flettede celler
Følgende makro tilpasser rækkehøjden automatisk for den aktuelt MARKEREDE række, hvis rækken indeholder flettede celler. Kan jeg lave denne makro om, så den SELV gennemsøger et område, fx B1:B90, og så tilpasser de rækker, der indeholder flettede celler?
Public Sub AutoFitMergedCellRowHeight() Dim iCurrentRowHeight As Single Dim iMergedCellRgWidth As Single Dim iActiveCellWidth As Single Dim iPossNewRowHeight As Single Dim rCurCell As Range If ActiveCell.MergeCells Then With ActiveCell.MergeArea If .Rows.Count = 1 And .WrapText = True Then Application.ScreenUpdating = False .EntireRow.AutoFit iCurrentRowHeight = .RowHeight iActiveCellWidth = ActiveCell.ColumnWidth For Each rCurCell In Selection iMergedCellRgWidth = rCurCell.ColumnWidth + iMergedCellRgWidth Next .MergeCells = False .Cells(1).ColumnWidth = iMergedCellRgWidth .EntireRow.AutoFit iPossNewRowHeight = .RowHeight .Cells(1).ColumnWidth = iActiveCellWidth .MergeCells = True .RowHeight = IIf(iCurrentRowHeight > iPossNewRowHeight, _ iCurrentRowHeight, iPossNewRowHeight) End If End With End If
Public Sub AutoFitMergedCellRowHeight() Dim rk '*** For rk = 1 To 90 '*** Range("B" & rk).Activate '***
Dim iCurrentRowHeight As Single Dim iMergedCellRgWidth As Single Dim iActiveCellWidth As Single Dim iPossNewRowHeight As Single Dim rCurCell As Range If ActiveCell.MergeCells Then With ActiveCell.MergeArea If .Rows.Count = 1 And .WrapText = True Then Application.ScreenUpdating = False .EntireRow.AutoFit iCurrentRowHeight = .RowHeight iActiveCellWidth = ActiveCell.ColumnWidth For Each rCurCell In Selection iMergedCellRgWidth = rCurCell.ColumnWidth + iMergedCellRgWidth Next .MergeCells = False .Cells(1).ColumnWidth = iMergedCellRgWidth .EntireRow.AutoFit iPossNewRowHeight = .RowHeight .Cells(1).ColumnWidth = iActiveCellWidth .MergeCells = True .RowHeight = IIf(iCurrentRowHeight > iPossNewRowHeight, _ iCurrentRowHeight, iPossNewRowHeight) End If End With End If
Hmmm... tilføjelserne resulterer i samme fejl, som jeg har fået ved mine egne forsøg på at få det til at virke: Run-time error 1004, "Kan ikke angive egenskaben ColumnWitdh for klassen Range", og der standses ved linjen:
.Cells(1).ColumnWidth = iMergedCellRgWidth
Mine evner rækker ikke til at se, hvad fejlen nærmere er begrundet i... :-)
Jeg har nu fundet en (mindre elegant) løsning på problemet:
Jeg har kopieret indholdet af de flettede celler over i celler i samme række "langt ude" i kolonne L, som er formatteret nøjagtig som teksten i de flettede celler. Kolonne L er lavet lidt smallere end de flettede celler tilsammen.
Når man herefter kører en autofit på hele området, så tilpasses rækkehøjden til indholdet i kolonne L og dermed indholdet af de flettede celler.
Jeg lader spørgsmålet stå åbent lidt endnu, hvis dernu skulle være én, der kan komme med en elegant makroløsning :-)
Sub begge() 'Marker område kør makro With ActiveCell Rows.AutoFit Columns.AutoFit End With End Sub '------------------------- Sub AktuelKolonne() 'Marker kolonne/kolonner kør makro With ActiveCell Columns.AutoFit End With End Sub '------------------------ Sub AktuelRække() 'Marker række/rækker kør makro With ActiveCell Rows.AutoFit End With End Sub
De 3 ovenstående er mere generelle autofit koder Denne påvirker kun celler i kolonne B som er Flettede.
Sub Makro1() Dim i [b1].Activate For i = 1 To 90 If ActiveCell.MergeCells Then Rows("" & i & ":" & i & "").EntireRow.AutoFit End If ActiveCell.Offset(1, 0).Select 'Activate Next End Sub
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.