Ввод в диапазон неповторяющихся значений



Рассмотрим бизнес-ситуацию, в которой надо в диапазон рабочего листа ввести список сотрудников с различными фамилиями, причем ввод автоматически производить в алфавитном порядке (рис. 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; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!