Здравствуйте, встретил макрос на просторах сети с автоподбором высоты строки, частично изменил что бы не оставалось лишнее поле, но не могу найти где можно настроить что бы не выделять диапазон, необходимо что бы редактировало например ячейки A1:O29 на листе 1 и на листе 2 A1:O20 и работало с ними, а не в ручную выделять необходимый диапазон
Здравствуйте, встретил макрос на просторах сети с автоподбором высоты строки, частично изменил что бы не оставалось лишнее поле, но не могу найти где можно настроить что бы не выделять диапазон, необходимо что бы редактировало например ячейки A1:O29 на листе 1 и на листе 2 A1:O20 и работало с ними, а не в ручную выделять необходимый диапазонkyznezov3003
Спасибо за совет, возможно криво но вроде сделал, вот код с исправлениями добавляются значения "Sheets("Лист2").Select и Range("C16:F18").Select", но вот возникла проблема что автопоставка размера по выделенным ячейкам происходит только на одном листе, можете что-либо посоветовать? [vba]
Код
Option Explicit
Sub ChangeRowColHeight() Dim rc As Range Dim bRow As Boolean bRow = (MsgBox("Изменять высоту строк?", vbQuestion + vbYesNo, "") = vbYes) 'bRow = True: для изменения высоты строк 'bRow = False: для изменения ширины столбцов Sheets("Лист1").Select Range("C16:F18").Select Sheets("Лист2").Select Range("C16:F18").Select Application.ScreenUpdating = False For Each rc In Selection RowColHeightForContent rc, bRow Next Application.ScreenUpdating = True End Sub '--------------------------------------------------------------------------------------- Function RowColHeightForContent(rc As Range, Optional bRowHeight As Boolean = True) 'rc - ячейка, высоту строки или ширину столбца которой необходимо подобрать 'bRowHeight - True - если необходимо подобрать высоту строки ' False - если необходимо подобрать ширину столбца Dim OldR_Height As Single, OldC_Widht As Single Dim MergedR_Height As Single, MergedC_Widht As Single Dim CurrCell As Range Dim ih As Integer Dim iw As Integer Dim NewR_Height As Single, NewC_Widht As Single Dim ActiveCellHeight As Single
If rc.MergeCells Then With rc.MergeArea 'если ячейка объединена 'запоминаем кол-во столбцов iw = .Columns(.Columns.Count).Column - rc.Column + 1 'запоминаем кол-во строк. ih = .Rows(.Rows.Count).Row - rc.Row + 1 'Определяем высоту и ширину объединения ячеек MergedR_Height = 0 For Each CurrCell In .Rows MergedR_Height = CurrCell.RowHeight + MergedR_Height Next MergedC_Widht = 1 For Each CurrCell In .Columns MergedC_Widht = CurrCell.ColumnWidth + MergedC_Widht Next 'запоминаем высоту и ширину первой ячейки из объединенных OldR_Height = .Cells(0, 0).RowHeight OldC_Widht = .Cells(1, 1).ColumnWidth 'отмеяем объединение ячеек .MergeCells = False 'назначаем новую высоту и ширину для первой ячейки .Cells(0).RowHeight = MergedR_Height .Cells(1, 1).EntireColumn.ColumnWidth = MergedC_Widht 'если необходимо изменить высоту строк If bRowHeight Then .EntireRow.AutoFit NewR_Height = .Cells(1).RowHeight 'запоминаем высоту строки .MergeCells = True If OldR_Height < (NewR_Height / ih) Then .RowHeight = NewR_Height / ih Else .RowHeight = OldR_Height End If 'возвращаем ширину столбца первой ячейки .Cells(1, 1).EntireColumn.ColumnWidth = OldC_Widht Else 'если необходимо изменить ширину столбца .EntireColumn.AutoFit NewC_Widht = .Cells(1).EntireColumn.ColumnWidth 'запоминаем ширину столбца .MergeCells = True If OldC_Widht < (NewC_Widht / iw) Then .ColumnWidth = NewC_Widht / iw Else .ColumnWidth = OldC_Widht End If 'возвращаем высоту строки первой ячейки .Cells(1, 1).RowHeight = OldR_Height End If End With End If End Function
[/vba]
Спасибо за совет, возможно криво но вроде сделал, вот код с исправлениями добавляются значения "Sheets("Лист2").Select и Range("C16:F18").Select", но вот возникла проблема что автопоставка размера по выделенным ячейкам происходит только на одном листе, можете что-либо посоветовать? [vba]
Код
Option Explicit
Sub ChangeRowColHeight() Dim rc As Range Dim bRow As Boolean bRow = (MsgBox("Изменять высоту строк?", vbQuestion + vbYesNo, "") = vbYes) 'bRow = True: для изменения высоты строк 'bRow = False: для изменения ширины столбцов Sheets("Лист1").Select Range("C16:F18").Select Sheets("Лист2").Select Range("C16:F18").Select Application.ScreenUpdating = False For Each rc In Selection RowColHeightForContent rc, bRow Next Application.ScreenUpdating = True End Sub '--------------------------------------------------------------------------------------- Function RowColHeightForContent(rc As Range, Optional bRowHeight As Boolean = True) 'rc - ячейка, высоту строки или ширину столбца которой необходимо подобрать 'bRowHeight - True - если необходимо подобрать высоту строки ' False - если необходимо подобрать ширину столбца Dim OldR_Height As Single, OldC_Widht As Single Dim MergedR_Height As Single, MergedC_Widht As Single Dim CurrCell As Range Dim ih As Integer Dim iw As Integer Dim NewR_Height As Single, NewC_Widht As Single Dim ActiveCellHeight As Single
If rc.MergeCells Then With rc.MergeArea 'если ячейка объединена 'запоминаем кол-во столбцов iw = .Columns(.Columns.Count).Column - rc.Column + 1 'запоминаем кол-во строк. ih = .Rows(.Rows.Count).Row - rc.Row + 1 'Определяем высоту и ширину объединения ячеек MergedR_Height = 0 For Each CurrCell In .Rows MergedR_Height = CurrCell.RowHeight + MergedR_Height Next MergedC_Widht = 1 For Each CurrCell In .Columns MergedC_Widht = CurrCell.ColumnWidth + MergedC_Widht Next 'запоминаем высоту и ширину первой ячейки из объединенных OldR_Height = .Cells(0, 0).RowHeight OldC_Widht = .Cells(1, 1).ColumnWidth 'отмеяем объединение ячеек .MergeCells = False 'назначаем новую высоту и ширину для первой ячейки .Cells(0).RowHeight = MergedR_Height .Cells(1, 1).EntireColumn.ColumnWidth = MergedC_Widht 'если необходимо изменить высоту строк If bRowHeight Then .EntireRow.AutoFit NewR_Height = .Cells(1).RowHeight 'запоминаем высоту строки .MergeCells = True If OldR_Height < (NewR_Height / ih) Then .RowHeight = NewR_Height / ih Else .RowHeight = OldR_Height End If 'возвращаем ширину столбца первой ячейки .Cells(1, 1).EntireColumn.ColumnWidth = OldC_Widht Else 'если необходимо изменить ширину столбца .EntireColumn.AutoFit NewC_Widht = .Cells(1).EntireColumn.ColumnWidth 'запоминаем ширину столбца .MergeCells = True If OldC_Widht < (NewC_Widht / iw) Then .ColumnWidth = NewC_Widht / iw Else .ColumnWidth = OldC_Widht End If 'возвращаем высоту строки первой ячейки .Cells(1, 1).RowHeight = OldR_Height End If End With End If End Function
Nic70y, Не могу немного понять, вот в данной ситуации высота строки меняется во второй книге, но в первой остается на старом месте, так же столкнулся с проблемой, при объединенной ячейке например 3 объединенные она становится больше нужного в 3 раза.
Nic70y, Не могу немного понять, вот в данной ситуации высота строки меняется во второй книге, но в первой остается на старом месте, так же столкнулся с проблемой, при объединенной ячейке например 3 объединенные она становится больше нужного в 3 раза.kyznezov3003
Nic70y, А не подскажете по поводу того что автоматическая высота ставится на 2-ом листе, но на первом не изменяется, как с этим справиться?
Nic70y, А не подскажете по поводу того что автоматическая высота ставится на 2-ом листе, но на первом не изменяется, как с этим справиться?kyznezov3003
Nic70y, Про этот файл идет речь, там вставлены макросы по вашему совету, но на 1-ом листе при запуске макроса не выставляет автоматически высоту строки, то есть он работает строго на 2-ом листе, пропуская 1-ый лист. Получается он на первый лист даже по умолчанию не ставит высоту строки
Nic70y, Про этот файл идет речь, там вставлены макросы по вашему совету, но на 1-ом листе при запуске макроса не выставляет автоматически высоту строки, то есть он работает строго на 2-ом листе, пропуская 1-ый лист. Получается он на первый лист даже по умолчанию не ставит высоту строкиkyznezov3003
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("a16:o29")) Is Nothing Then Target.Select Call ChangeRowColHeight End If End Sub
[/vba] [vba]
Код
Sub ChangeRowColHeight() Dim rc As Range Application.ScreenUpdating = False For Each rc In Selection RowColHeightForContent rc Next Application.ScreenUpdating = True End Sub
[/vba]
если особо не вникать (править) в код [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("a16:o29")) Is Nothing Then Target.Select Call ChangeRowColHeight End If End Sub
[/vba] [vba]
Код
Sub ChangeRowColHeight() Dim rc As Range Application.ScreenUpdating = False For Each rc In Selection RowColHeightForContent rc Next Application.ScreenUpdating = True End Sub
Nic70y, Не помогло, в любом случае точно такая же проблема, работает на одной, но не работает на другой, но придумал как решить проблему, просто несколько макросов добавлю на каждую страницу отдельно, сделаю выносками, спасибо за помощь)))
Nic70y, Не помогло, в любом случае точно такая же проблема, работает на одной, но не работает на другой, но придумал как решить проблему, просто несколько макросов добавлю на каждую страницу отдельно, сделаю выносками, спасибо за помощь)))kyznezov3003