Всем привет! Скачал готовый макрос на просторах интернета, но столкнулся с ошибкой в строке "If Not isEmpty(cell.Value) Then " выделяет "isEmpty". Ознакомился со статьей Дмитрия и как я понял проблема в том, что используется переменная которая не объявлена, но это не так. Помогите, пожалуйста, сделать макрос рабочим.
Скрытый текст
Код
Sub УвелечениеВысотыСтрок()
Dim ws As Worksheet
Dim row As Range
Dim cell As Range
Dim isEmpty As Boolean
' Установка активного листа
Set ws = ActiveSheet
' Перебор всех строк в листе
For Each row In ws.UsedRange.Rows
isEmpty = True
' Проверка каждой ячейки в строке на наличие данных
For Each cell In row.Cells
If Not isEmpty(cell.Value) Then
isEmpty = False
Exit For
End If
Next cell
' Увеличение высоты строки, если она не пуста
If Not isEmpty Then
row.RowHeight = row.RowHeight + 10
End If
Next row
End Sub
IsEmpty является функцией VBA и использовать ее в качестве переменной нельзя П.С. Row - тоже служебное слово, и, хотя, его можно использовать как имя переменной, но это чревато ошибками. Это касается и всех других зарезервированных выражений VBA/Excel и т.п.
Согласие есть продукт при полном непротивлении сторон
Sanja, спасибо. изменил все наименования переменных
Теперь ругается на строке "row.RowHeight = row.RowHeight + 10"
Скрытый текст
Код
Sub УвелечениеВысотыСтрок()
Dim wsq As Worksheet
Dim rowq As Range
Dim cellq As Range
Dim isEmptyq As Boolean
' Установка активного листа
Set wsq = ActiveSheet
' Перебор всех строк в листе
For Each rowq In wsq.UsedRange.Rows
isEmptyq = True
' Проверка каждой ячейки в строке на наличие данных
For Each cellq In rowq.Cells
If Not isEmpty(cellq.Value) Then
isEmptyq = False
Exit For
End If
Next cellq
' Увеличение высоты строки, если она не пуста
If Not isEmptyq Then
row.RowHeight = row.RowHeight + 10
End If
Next rowq
End Sub
В жизни нет ничего невозможного! Есть только недостаток знаний и умений.
Есть таблица из 30+ столбцов и "n" кол-во строк. Проблема возникает когда отправляешь на печать таблицу. На экране проблем нет, но при печати некоторые строки обрезаются снизу, не хватает высоты строки (около 5 пикселей)
В жизни нет ничего невозможного! Есть только недостаток знаний и умений.
Александр, приветствую. С учётом вышеприведённых замечаний от коллег:
Скрытый текст
Код
Sub УвелечениеВысотыСтрок() Dim ws As Worksheet
Dim r As Range
Dim c As Range
Dim isEmptyRow As Boolean
' Установка активного листа
Set ws = ActiveSheet
' Перебор всех строк в листе
For Each r In ws.UsedRange.Rows
isEmptyRow = True
' Проверка каждой ячейки в строке на наличие данных
For Each c In r.Cells
If Not isEmpty(c.Value) Then
isEmptyRow = False
Exit For
End If
Next c
' Увеличение высоты строки, если она не пуста
If Not isEmptyRow Then
r.RowHeight = r.RowHeight + 10
End If
Next r
End Sub
Sub УвелечениеВысотыСтрок()
'Dim ws As Worksheet
Dim r As Range
' Dim c As Range
' Dim isEmptyRow As Boolean
' Установка активного листа
' Set ws = ActiveSheet
' Перебор всех строк в листе
On Error Resume Next
For Each r In ActiveSheet.UsedRange.Rows
' isEmptyRow = True
' ' Проверка каждой ячейки в строке на наличие данных
' For Each c In r.Cells
' If Not IsEmpty(c.Value) Then
' isEmptyRow = False
' Exit For
' End If
' Next c
' ' Увеличение высоты строки, если она не пуста
' If Not isEmptyRow Then
' r.RowHeight = r.RowHeight + 10
' End If
If r.SpecialCells(xlCellTypeBlanks).Count <> r.Cells.Count Then
r.RowHeight = r.RowHeight + 10
End If
Next r
On Error GoTo 0
End Sub
Итог
Код
Sub УвелечениеВысотыСтрок()
Dim ws As Worksheet
Dim r As Range
' Перебор всех строк в листе
On Error Resume Next
For Each r In ActiveSheet.UsedRange.Rows
If r.SpecialCells(xlCellTypeBlanks).Count <> r.Cells.Count Then
r.RowHeight = r.RowHeight + 10
End If
Next r
On Error GoTo 0
End Sub
БМВ, Спасибо! Вы оказывается правки добавили в код. Теперь работает! Я как понимаю, тут перебор всех строк на активном листе? Это оказывается и не критично, времени занимает сек 10
В жизни нет ничего невозможного! Есть только недостаток знаний и умений.
Нет, перебор все строк в используемом диапазоне на активном листе, как был так и остался, а вот в строках перебор ячеек на проверку заполнения переделал.