Ввод в диапазон неповторяющихся значений
Рассмотрим бизнес-ситуацию, в которой надо в диапазон рабочего листа ввести список сотрудников с различными фамилиями, причем ввод автоматически производить в алфавитном порядке (рис. 5.10).
Рис. 5.10. Ввод в диапазон неповторяющихся значений
Итак:
1. Введите в ячейку А1 значение Фамилия .
2. Введите в ячейку В1 значение Новый сотрудник .
3. В диапазон ячеек, начиная с ячейки А2, вниз вдоль столбца А будут вводиться фамилии отобранных сотрудников.
4. В ячейку С1 будет вводиться имя очередного сотрудника.
5. На рабочем листе расположите кнопку. При помощи окна Properties установите у нее значения свойств Name и Text равными cmdEnter и Ввод.
6. В модуле рабочего листа наберите код из листинга 5.59. Поиск подходящего значения производится методом Match объекта Application.
Private Sub cmdEnter_Click()
Application.DisplayAlerts = False
If IsError(Application.Match(Range("C1"), _
Range(Range("A2"), Range("A2").End(xlDown)), 0)) Then
If Range("A1").CurrentRegion.Rows.Count > 1 Then
With Range("A1").End(xlDown).Offset(1, 0)
.Value = Range("C1").Value
.Sort Keyl:=Range("A2"), Orderl:=xlAscending, Header:=xlYes
End With
Else
Range("A2").Value = Range("C1").Value
End If
Else
MsgBox ("Уже существует")
End If
End Sub
Озвучивание текста
Объект Speech инкапсулирует в себе средства по озвучиванию текста, содержащегося в ячейках рабочего листа. Метод Speak реализует непосредственно произношение, свойство Direction задает порядок прочитывания текста (допустимые значения: xlSpeakByColumns и xlSpeakByRows), а свойство SpeakCellOnEnter устанавливает или отменяет режим чтения текста после его ввода в ячейку. В следующем коде (листинг 5.60) процедура Speaker читает текст из ячеек указанного диапазона, а процедура SpeakerString читает указанную строку текста.
|
|
Sub TestSpeaker()
Range("C2").Value = "Hello, everybody!"
Range("D2").Value = "How are you?"
Speaker Range("C2:D2"), xlSpeakByRows
SpeakerString "Not too bad"
End Sub
Sub Speaker(r As Range, direction As Integer)
Application.Speech.direction = direction
r.Speak
End Sub
Sub SpeakerString(s As String)
Application.Speech.Speak s
End Sub
Построение графа
По табличным данным на рабочем листе не трудно построить весовой граф. Продемонстрируем это на примере. В нашем примере у графа будут четыре вершины v1, v2, v3 и v4, но их количество для приводимой ниже программы не существенно. В диапазон ячеек В2:Е5 введите веса для ребер, соединяющих специфицированные вершины (рис. 5.1!), а в диапазон F2:G5— координаты вершин. В стандартном модуле наберите код из листинга 5.61. Вот и все. Вершины, ребра и подписи с весами ребер графа — все это объекты Shape, только разногого типа: вершины — это овалы, ребра — это соединители, а подписи — это надписи.
Листинг 5.61. Построение графа
Option Explicit
Option Base 1
Sub TreeBuilder()
Const N As Integer = 4
Dim i As Integer, j As Integer
Dim V(N) As Shape, Sh As Shape
|
|
Dim Dist(N, N) As Integer, X(N) As Integer, Y(N) As Integer
For i = 1 To N
X(i) = ActiveSheet.Cells(i + 1, N + 2)
Y(i) = ActiveSheet.Cells(i + 1, N + 3)
Next
For i = 1 To N
For j = 1 To N
Dist(i, j) = ActiveSheet.Cells(i + 1, j + 1)
Next j
Next
For i = 1 To N
Set V(i) = ActiveSheet.Shapes.AddShape(msoShapeOval, _
X(i), t-(ij + 60, 16, 16)
V(i).TextFrame.Characters.Text = CStr(i)
V(i).TextFrame.Characters.Font.Size – 10
V(i).TextFrame.Characters.Font.Bold = True
Next
For i = 1 To N – 1
For j = i + 1 To N
If Dist(i, j) <> 0 Then
Set Sh = ActiveSheet.Shapes.AddConnector( _
msoConnectorStraight, 0, 0, 0, 0)
With Sh.ConnectorFormat
.BeginConnect ConnectedShape:=V(i), ConnectionSite:=l .EndConnect ConnectedShape:=V(j), ConnectionSite:=1
End With
Sh.RerouteConnections
If X(i) = X(j) Then
Set Sh = ActiveSheet.Shapes.AddLabel( _
msoTextOrientationHorizontal, _
(X(i) + X(j)) /2-5, (Y(i) + Y(j)) / 2 + 60, 60, 150)
Else
Set Sh = ActiveSheet.Shapes.AddLabel( _
msoTextOrientationHorizontal, _
(X(i) + X(j)) / 2, (Y(i) + Y(j)) / 2 + 50, 60, 150)
End If
Sh.TextFrame.Characters.Text = CStr(Dist(i, j))
Sh.TextFrame.Characters.Font.Size = 10
End If
Next
Next
End Sub
Рис. 5.11. Построение графа
Пользовательские функции
В Excel наряду с использованием множества встроенных функций можно создавать и пользовательские. Пользовательскими являются обычные функции, определенные в стандартном модуле. В качестве примера построим очень простую функцию, которая возвращает квадрат введенного значения. В стандартном модуле наберите следующий код:
Function Sq(x As Double) As Double
Sq = x ^ 2
End Function
Вот, собственно говоря, и все, пользовательская функция создана. По умолчанию она попадает в раздел Определенные пользователем списка Категория окна Мастер функций. Найдем, например, квадрат значения 2,5. Для этого:
|
|
1. Выберите ячейку А2.
2. Введите число 2,5 в ячейку А2.
3. Выберите ячейку В2, в которой найдем значение функции.
4. Выберите команду Вставка►Функция .
5. В первом окне Мастера функций в списке Категория выберите Определенные пользователем , а в списке Выберите функцию укажите Sq. Нажмите кнопку ОК .
6. Во втором окне Мастера функций в поле х введите ссылку на ячейку А2 и нажмите кнопку ОК .
Математические функции
При создании функций пользователя полезно знать, какие встроенные математические функции имеются в VBA. На самом деле таких функций совсем не много:
r Abs (number)— абсолютная величина числа;
r Atn(number) —арктангенс;
r Cos( number ) — косинус;
r Exp ( number ) — экспонента, т. е. результат возведения основания натурального логарифма в указанную степень;
r Log (number) — натуральный логарифм;
r Rnd( number ) — случайное число из интервала [0; 1);
r Sgn( number ) — знак числа;
r Sin(number) — синус;
r Sqr ( number ) — квадратный корень из числа;
r Tan(number) — тангенс;
r Fix ( number ), Int ( number ) — обе функции Int и Fix отбрасывают дробную часть числа и возвращают целое значение. Различие между функциями Int и Fix состоит в том, что для отрицательного значения параметра number функция Int возвращает ближайшее отрицательное целое число, меньшее либо равное указанному, a Fix — ближайшее отрицательное целое число, большее либо равное указанному.
|
|
Надстройки
При создании функции или макроса, достаточно часто используемых, их рекомендуется разместить в файле надстройки, т. е. в файлах с расширением xla. Основным преимуществом подобной операции является то, что настройки позволяют использовать функции в любой рабочей книге без ее спецификации. Например, если функция Sq расположена в книге FunCollection.xls, то в другой рабочей книге на нее надо ссылаться следующим образом
=FunCollection.xlsl!Sq(Al)
в то время как, если эта функция расположена в надстройке, то на нее можно ссылаться только по имени
= Sq(Al)
Для создания надстройки:
1. Расположите функции в модуле рабочей книги.
2. В редакторе VBA выберите команду Tools ► VBAProject Properties. На вкладке Protection окна VBAProject - Project Properties установите флажок Lock project for viewing и в поля Password и Confirm password введите и подтвердите пароль. Нажмите кнопку ОК. Теперь без знания пароля никто не сможет просматривать ваш код и вносить в него изменения.
3. Выберете команду Файл ► Сохранить как и в появившемся окне Сохранение документа в списке Тип файла выберите Надстройка Microsoft Excel. В поле Имя файла укажите имя файла, а в списке Папка специфицируйте каталог расположения надстройки. Нажмите кнопку Сохранить. Рабочая книга будет сохранена как XLA-файл.
Установить надстройку можно следующим образом:
1. Выберите команду Сервис ► Надстройка .
2. В появившемся диалоговом окне Надстройка при помощи кнопки Обзор добавьте ссылку на искомый XLA-файл и нажмите кнопку ОК.
Распространять приложения, использующие надстройки, конечно, надо вместе с соответствующими XLA-файлами.
Где хранятся макросы?
Если вы хотите, чтобы ваш макрос был достижим в любой активной книге, то его надо хранить в файле Personal.xls. Этот файл создается по умолчанию и хранится в XLSTART-каталоге. Для записи макроса в файл Personal.xls при инициализации макроса в окне Макрос в списке Находится в выберите Все открытые книги. Отметим, что по умолчанию файл Personal.xls является скрытым файлом.
Дата добавления: 2019-02-12; просмотров: 162; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!