Avatar billede jacobvedel Nybegynder
13. marts 2006 - 11:09 Der 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

    Set rCurCell = Nothing
End Sub
Avatar billede excelent Ekspert
14. marts 2006 - 05:39 #1
'et bud

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

    Set rCurCell = Nothing
Next '***
End Sub
Avatar billede jacobvedel Nybegynder
14. marts 2006 - 08:19 #2
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... :-)
Avatar billede jacobvedel Nybegynder
14. marts 2006 - 10:11 #3
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 :-)
Avatar billede excelent Ekspert
29. marts 2006 - 22:50 #4
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
Avatar billede jacobvedel Nybegynder
30. marts 2006 - 17:27 #5
Jeg har desværre ikke tid til at efterprøve dit svar, men vilda i hvert fald gerne belønne din indsats :-) - så hvis du lige laver et formelt "svar".
Avatar billede excelent Ekspert
30. marts 2006 - 19:14 #6
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
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester