2013-10-15 10 views
0

У меня есть небольшая проблема в excel. Я не знаком с макросами excel и буду благодарен за помощь. Я пытаюсь найти макрос, который выравнивает высоту объединенной ячейки, чтобы соответствовать ее контенту. автоматически. Я нашел кое-что, с которым могли бы сделать, что для ячеек в нескольких столбцах, но не для нескольких строк, а также не автоматически:Excel автоматически регулирует высоту объединенных ячеек

Sub AutoFitMergedCellRowHeight() 
Dim CurrentRowHeight As Single, MergedCellRgWidth As Single 
Dim CurrCell As Range 
Dim ActiveCellWidth As Single, PossNewRowHeight As Single 
Dim iX As Integer 

If ActiveCell.MergeCells Then 
    With ActiveCell.MergeArea 
     If .Rows.Count = 1 And .WrapText = True Then 
      Application.ScreenUpdating = False 
      CurrentRowHeight = .RowHeight 
      ActiveCellWidth = ActiveCell.ColumnWidth 
      For Each CurrCell In Selection 
       MergedCellRgWidth = CurrCell.ColumnWidth + _ 
        MergedCellRgWidth 
       iX = iX + 1 
      Next 
      MergedCellRgWidth = MergedCellRgWidth + (iX - 1) * 0.71 
      .MergeCells = False 
      .Cells(1).ColumnWidth = MergedCellRgWidth 
      .EntireRow.AutoFit 
      PossNewRowHeight = .RowHeight 
      .Cells(1).ColumnWidth = ActiveCellWidth 
      .MergeCells = True 
      .RowHeight = IIf(CurrentRowHeight > PossNewRowHeight, _ 
       CurrentRowHeight, PossNewRowHeight) 
     End If 
    End With 
End If 

End Sub

Конечный результат должен выглядеть следующим образом: enter image description here Спасибо заранее ,

+0

Вы должны быть в состоянии следовать аналогичной схеме для строк: если клетки будут объединены затем разблокировать их, автоподтвердить первую ячейку и отметить установленную высоту ряда. Затем очистите ячейки и установите последнюю высоту ячейки, равную высоте, которую вы указали, за вычетом высоты всех остальных строк. –

ответ

4

Что-то вроде:

Dim h, rng As Range 
Set rng = Selection 

With rng 
    .UnMerge 
    .Cells(1).EntireRow.AutoFit 
    h = .Cells(1).RowHeight 
    .Merge 
    .EntireRow.AutoFit 
    With .Cells(1).MergeArea 
     .Cells(.Cells.Count).RowHeight = _ 
      .Cells(.Cells.Count).RowHeight + (h - .Height) 
    End With 
End With 
+0

Это не работает в случае, если высота rng.Cells (1) .MergeArea больше высоты rng.Cells (1) .RowHeight, поскольку в этом случае пытается установить отрицательный RowHeight для последней ячейки MergeArea , Это можно исправить добавлением if к последнему разделу «С», например: С .Целе (1) .MergeArea Если h> .Height Затем .Цветы (.Цветы.) .RowHeight = _ .Cells (.Cells.Count) .RowHeight + (h - .Height) End If End With – juhako

1

Существует гораздо более простой способ сделать это, если вы позволяете лист Excel, чтобы сделать некоторые тяжелую для вас.

Следующий пример работает в общем сценарии, что у вас есть несколько ячеек, которые содержат несколько столбцов, но только одну строку (т. Е. Некоторые столбцы объединены вместе в одну строку). Обычная проблема заключается в том, что высота строки для обернутого текста в объединенной ячейке не вмещает высоту обернутого текста в некоторых случаях (например, результат поиска формулы или базы данных дает большой и различный объем текста)

чтобы решить эту проблему, имитировать одноклеточные версии объединенных ячеек, выполнив следующие действия в некоторых столбцах, которые не видны пользователю:

  1. в одной ячейке, которая находится на той же строке, объединенную ячейку, поместите идентичные формулы или просто устанавливают формулы, равные ссылке на объединенную ячейку.
  2. Сделайте это для всех объединенных ячеек.
  3. Сделайте ширину одиночных версий ячеек равными ширине каждой объединенной ячейки (ячеек). Теперь у вас есть набор одноячеистых версий объединенных ячеек в тех же строках, но с одинаковой шириной столбца.
  4. Назовите эти отдельные ячейки.
  5. Написать функцию, которая перебирает все этих названные одиночных диапазонов ячеек и вызывает следующую функцию для каждого:

    Private Sub AutosizeLongFormInput(rng As Range) 
        If Not rng.EntireRow.Hidden = True Then 
         rng.EntireRow.AutoFit 
        End If 
    End Sub 
    

+0

Шаг 3 кажется сложным для меня из-за несоответствия единиц измерения. Например, '.MergeArea.Width' возвращается как 48 для стандартной ширины столбца 8.43 (64 пикселя). Попытка установить ширину ячейки копии из этого оставила меня, взяв замысловатый подход, чтобы попытаться разобраться, как далеко я был, корректируя коэффициент ошибки и снова пытающийся! Это работает, но это ужасно. Я что-то пропустил? –

+0

@AjV Jsy- Решение, которое я разместил, предполагает, что у вас есть ячейки с постоянной шириной, и просто хотите автоматически настроить высоту строки, чтобы она соответствовала их обернутому тексту. Таким образом, процесс установки ширины копий-ячеек выполняется вручную во время разработки. Если вы сделаете скопированные ячейки немного более узкими, чем настоящие объединенные ячейки, тогда они должны дать вам автоматическую высоту, которая всегда достаточно велика, чтобы соответствовать всему тексту. если вам нужно сделать это много, напишите быстрый макрос утилиты, который дает сумму ширины выбранных ячеек, чтобы помочь получить ширину, требуемую для копий. –

Смежные вопросы