Excel. Трюки и эффекты — страница 20 из 36

tr>» & vbCrLf

' Переход на следующую сроку

lngLastRow = lngRow

End If

' Задание шрифта ячейки

If Not IsNull(cell.Font.Size) Then

strStyle = « style=» & "font-size: " & Int(100 * _

cell.Font.Size / 19) & «%;»

End If

' Для полужирного шрифта вставляем

If cell.Font.Bold Then

strCellText = «» & strCellText & «»

End If

' Задание выравнивания

If cell.HorizontalAlignment = xlRight Then

' По правому краю

strAlign = « align=» & «right»

ElseIf cell.HorizontalAlignment = xlCenter Then

' По центру

strAlign = « align=» & «center»

Else

' По левому краю (по умолчанию)

strAlign = ""

End If

' Чтение текста в ячейке

strCellText = cell.Text

' Если нужно, то вертикальный вывод текста (в строку strTemp _

с последующим перенесением обратно в strCellText)

If cell.Orientation <> xlHorizontal Then

strTemp = ""

' Печать после каждого символа специального _

разделителя –

For i = 1 To Len(strCellText)

strTemp = strTemp & Mid$(strCellText, i, 1) & «
»

Next i

strCellText = strTemp

strStyle = ""

End If

strOut = strOut & vbTab & vbTab & «

strAlign & «>» & strCellText & «» & vbCrLf

Next

' Вставка для первой строки и  – для последней

strOut = vbTab & «» & vbCrLf & strOut & vbTab & «»

& vbCrLf

' Вставка дескриптора

strOut = «

» _

& vbCrLf & strOut & vbCrLf & «

»–

' Сохранение HTML-кода в файл

Open strFileName For Output As 1

Print #1, strOut

Close 1

' Вывод окна с информационным сообщением о результатах работы

MsgBox Selection.Count & " ячеек экспортировано в файл " & _

strFileName

End Sub

После написания кода будет создан макрос ExportAsHtmlFile, результатом работы которого будет сформированный файл Primer.htm (не стоит забывать, что перед выполнением макроса необходимо выделить диапазон, данные которого должны быть преобразованы в HTML-формат). Путь для сохранения по обычным правилам Windows указывается в окне, которое открывается на экране сразу после запуска макроса (в этом же окне можно изменить имя создаваемого файла, которое предлагается по умолчанию). По окончании преобразования на экране отобразится окно, в котором пользователю сообщается количество преобразованных ячеек и путь к созданному НТМ-файлу.

Поиск данных нештатными средствами

Как известно, Excel включает в себя штатные средства поиска требуемых данных. Однако в некоторых случаях для этого целесообразнее использовать макрос, код которого приведен в листинге 3.60.

Листинг 3.60. Поиск данных с помощью макроса

Sub CustomSearch()

Dim strFindData As String

Dim rgFound As Range

Dim i As Integer

' Ввод строки для поиска

strFindData = InputBox(«Введите данные для поиска»)

' Просмотр всех рабочих листов книги

For i = 1 To Worksheets.Count

With Worksheets(i).Cells

' Поиск на i-м листе

Set rgFound = .Find(strFindData, LookIn:=xlValues)

If Not rgFound Is Nothing Then

' Ячейка с заданным значением найдена – выделим ее

Sheets(i).Select

rgFound.Select

Exit Sub

End If

End With

Next

' Поиск завершен. Ячейка не найдена

MsgBox («Поиск не дал результатов»)

End Sub

При выполнении данного макроса открывается окно, изображенное на рис. 3.18.

Рис. 3.18. Ввод данных для поиска


В данном окне с клавиатуры следует ввести текст (число, дату и т. п.), который требуется найти, и нажать кнопку ОК. Результатом поиска будет позиционирование курсора в ячейке с искомым текстом. Если же поиск не дал результатов, то на экран будет выведено окно, изображенное на рис. 3.19.

Рис. 3.19. Информационное сообщение


Следует отметить, что поиск данных ведется не только на текущем рабочем листе, но и на всех остальных листах открытой рабочей книги.

Включение автофильтра с помощью макроса

Как известно, включение автофильтра для выделенного диапазона осуществляется на вкладке Данные с помощью кнопки Фильтр. Для этого можно также воспользоваться следующим макросом (листинг 3.61).

Листинг 3.61. Включение автофильтра

Sub EnableAutoFilter()

On Error Resume Next

Selection.AutoFilter

End Sub

Для данного макроса можно создать значок и поместить его на панель инструментов – это позволит включать автофильтр быстрее, чем стандартным способом.

Трюки с форматированием

В данном разделе мы рассмотрим несколько трюков, с помощью которых можно быстро выполнить нестандартное форматирование выделенного диапазона.

Изменение формата представления чисел нештатными средствами

С помощью небольшого макроса можно быстро установить выделенному диапазону ячеек формат «два знака после запятой». Данный макрос выглядит следующим образом (листинг 3.62).

Листинг 3.62. Формат «два знака после запятой»

Sub ChangeNumberFormat()

Selection.NumberFormat = «0.00»

End Sub

После выполнения макроса числа в выделенном диапазоне будут отображены с двумя знаками после запятой (например, число 54 будет показано как 54,0 0).

Для форматирования ячеек с использованием разделителя по разрядам можно применить такой макрос (листинг 3.63).

Листинг 3.63. Использование разделителя по разрядам

Sub ThreeNullSepatator()

Selection.NumberFormat = «#,##»

End Sub

В результате выполнения данного макроса число, например, 1234 5 67 будет представлено в виде 1 234 567. Не стоит забывать, что перед запуском макроса необходимо выделить диапазон, который должен быть отформатирован.

Чтобы отформатировать какой-либо диапазон с использованием разделителя по разрядам и отображением двух знаков после запятой, можно воспользоваться следующим макросом (листинг 3.64).

Листинг 3.64. Изменение формата

Sub ChangeNumerFormatEx()

Selection.NumberFormat = «#,##0.00»

End Sub

В данном случае перед запуском макроса также необходимо выделить требуемый диапазон.

Помещение последнего символа ячейки над строкой

Рассматриваемый в данном подразделе трюк позволяет преобразовать последний символ ячейки в верхний индекс. Для этого следует применить макрос, приведенный в листинге 3.65.

Листинг 3.65. Помещение последнего символа над строкой

Sub LastCharUp()

' Изменение расположения последнего символа ячейки

With ActiveCell.Characters(Start:=Len(Selection),

Length:=1).Font

.Superscript = True

End With

End Sub

В результате выполнения макроса можно в ячейке вместо значения, например, м3 получить значение м3. При этом следует учитывать, что данный макрос не преобразует числовые значения (например, представление числа 72 не изменится).

Создание нестандартной рамки

Возможности программы позволяют быстро заключить в рамку выделенный диапазон, изменив при этом вид сетки. Для достижения такого эффекта достаточно применить следующий макрос (листинг 3.66).

Листинг 3.66. Нестандартная рамка

Sub ChangeSelGrid()

' Оформление границ выделения

' Левая граница

With Selection.Borders(xlEdgeLeft)

.LineStyle = xlContinuous

.Weight = xlThin

.ColorIndex = xlAutomatic

End With

' Правая граница

With Selection.Borders(xlEdgeRight)

.LineStyle = xlContinuous

.Weight = xlThin

.ColorIndex = xlAutomatic

End With

' Верхняя граница

With Selection.Borders(xlEdgeTop)

.LineStyle = xlContinuous

.Weight = xlThin

.ColorIndex = xlAutomatic

End With

' Нижняя граница

With Selection.Borders(xlEdgeBottom)

.LineStyle = xlContinuous

.Weight = xlThin

.ColorIndex = xlAutomatic

End With

' Изменение сетки внутри выделения

' Вертикальные линии сетки

With Selection.Borders(xlInsideVertical)

.LineStyle = xlContinuous

.Weight = xlHairline

.ColorIndex = xlAutomatic

End With

' Горизонтальные линии сетки

With Selection.Borders(xlInsideHorizontal)

.LineStyle = xlContinuous

.Weight = xlHairline

.ColorIndex = xlAutomatic

End With

End Sub

Результат применения макроса показан на рис. 3.20.

На рисунке видно, что диапазон ячеек ограничен рамкой, а сетка внутри его представлена в виде пунктирных линий.

Рис. 3.20. Рамка и сетка

Быстрая вставка фамилий должностных лиц в документ

Трюк, который мы рассмотрим в данном разделе, позволяет быстро вставить в любое место документа определенный заранее текст. Такую возможность удобно использовать, например, для вставки в документ должностей и фамилий директора и главного бухгалтера предприятия (либо других сотрудников). Подобная задача реализуется при использовании макроса, код которого приведен в листинге 3.67.

Листинг 3.67. Вставка текста в документ

Sub InsertCustomText()

' Заполнение текущей ячейки

ActiveCell = «Генеральный директор»

Selection.Font.Bold = True

' Фамилия на три столбца правее должности

Cells(ActiveCell.Row, ActiveCell.Column + 3).Select

ActiveCell.FormulaR1C1 = «А. Б. Рублев»

Selection.Font.Bold = True

' Ячейка с «Главный бухгалтер» на три столбца левее _

и на три строки ниже ячейки с фамилией директора

Cells(ActiveCell.Row + 3, ActiveCell.Column – 3).Select

ActiveCell = «Главный бухгалтер»

Selection.Font.Bold = True

' Фамилия на три столбца правее должности

Cells(ActiveCell.Row, ActiveCell.Column + 3).Select

ActiveCell = «Т. С. Копейкин»

Selection.Font.Bold = True

End Sub

После выполнения данного макроса соответствующий текст будет вставлен в том месте документа, где расположен курсор (рис. 3.21).

Рис. 3.21. Вставка текста в документ


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

Вызов окна настройки шрифта

С помощью небольшого макроса можно вызывать окно настройки параметров шрифта. Код этого макроса выглядит так (листинг 3.68).

Листинг 3.68. Окно настройки шрифта

Sub ShowFontDialog()

' Вызов стандартного окна настройки шрифта текущей ячейки

Application.Dialogs(xlDialogActiveCellFont).Show

End Sub

После его выполнения откроется окно Формат ячеек, в котором выполняются необходимые действия. Заданные в данном окне настройки применяются к ячейке, в которой установлен курсор.

Вывод информации о текущем документе