Excel. Трюки и эффекты | страница 113



intRow = intRow + 1

End If

Loop

End Sub

При выполнении данной операции следует учитывать, что будут удалены только пустые строки, представляющие собой «пробелы». Например, если данные хранятся в строках с 1 по 10, но при этом строки 5 и 7 пустые, то после применения макроса строки 5 и 7 будут удалены и заменены следующими за ними строками с данными, а строки 11,12,13,14…. останутся на месте.

К аналогичному результату приведет также использование такого макроса (листинг 3.53). В данном случае удаление пустых строк происходит снизу вверх. Это позволяет упростить алгоритм, так как не нужно учитывать сдвиг данных вверх при удалении строк.

Листинг 3.53. Удаление пустых строк (вариант 2)

Sub DeleteEmptyStrings1()

Dim intRow As Integer

Dim intLastRow As Integer

' Получение номера последней используемой строки

intLastRow = ActiveSheet.UsedRange.Row + _

ActiveSheet.UsedRange.Rows.Count – 1

' Удаление пустых строк

For intRow = intLastRow To 1 Step -1

If ActiveSheet.Rows(intRow).Text = "" Then

ActiveSheet.Rows(intRow).Delete

End If

Next intRow

End Sub

Для удобства работы можно создать кнопку и привязать к ней какой-либо из приведенных макросов – тогда удаление пустых строк будет производиться при нажатии этой кнопки.

Запись текущих данных в текстовый файл

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

Листинг 3.54. Запись в текстовый файл

Sub SaveAsText()

Dim cell As Range

' Открытие файла для сохранения (имя файла соответствует

имени _

рабочей книги, но отличается расширением – TXT)

Open ThisWorkbook.Path & "\" & ThisWorkbook.Name & «.txt» _

For Output As #1

' Запись содержимого заполненных ячеек таблицы в файл

For Each cell In ActiveSheet.UsedRange

If Not IsEmpty(cell) Then

Print #1, cell.Address, cell.Formula

End If

Next

' Не забываем закрывать файл

Close #1

End Sub

К аналогичному результату приведет использование такого макроса (он отличается тем, что учитывает национальные настройки) (листинг 3.55).

Листинг 3.55. Экспорт в текстовый файл

Sub SaveAsText1()

Dim cell As Range

' Открытие файла для сохранения (имя файла соответствует

имени _

рабочей книги, но отличается расширением – TXT)

Open ThisWorkbook.Path & "\" & ThisWorkbook.Name & «.txt» _

For Output As #1

' Запись содержимого заполненных ячеек таблицы в файл

For Each cell In ActiveSheet.UsedRange

If Not IsEmpty(cell) Then