47889 (608403), страница 7
Текст из файла (страница 7)
Evaluate("A2").Formula = "A1^2"
MsgBox Evaluate("A2").Value
End Sub
Листинг 8 Симулирование ячеек
Public Sub stimulirovanie()
Dim firstCell As Range
Dim secondCell As Range
Set firstCell = Evaluate("A1")
Set secondCell = Evaluate("A2")
firstCell.Value = 25
secondCell.Formula = "A1^2"
MsgBox secondCell.Value
End Sub
Электронные часы в ячейке рабочего листа
Метод позволяет создать электронные часы. Для этого достаточно рекурсивно вызывать процедуру, в которой считывается текущее время. Затем оно выводится в ячейку рабочего листа, найденное время увеличивается на секунду, и уже для вычисленного нового времени устанавливается рекурсивный вызов процедуры.
Листинг 9. Электронные часы в ячейке рабочего листа. Стандартный модуль
Sub DemoClock()
DemoOnTime
End Sub
Sub DemoOnTime()
Dim newHour, newMinute, newSecond, newTime
Cells(1, 1).Value = Now
newHour = Hour(Now)
newMinute = Minute(Now)
newSecond = Second(Now)
newTime = TimeSerial(newHour, newMinute, newSecond)
Application.OnTime EarliesTime:=newTime, Procedure:="DemoOnTime"
End Sub
Доступ к отдельным ячейкам диапазона
Свойство Cells объекта Range, использованное без индексов, возвращает все ячейки диапазона, а с индексов- конкретную ячейку, специфицированную либо ее номером(один параметр), либо местоположением (два параметра).
Например, в следующем коде в диапазоне В1:С3 все положительные значения заменяются на 1, а отрицательные на -1.
Листинг 10. Все ячейки диапазона
Dim a as Range
For Each a in Range (В1:С3).Cells
If a.Value >0 Then
a.Value =1
Else if a.Value < 0 then
a.Value =-1
End if
Next
Листинг 11
Dim i As Integer Dim j As Integer
For i = 1 To Range("B1:C3").Columns.Count For j = 1 To Range("Bl:C3").Columns.Count
If Range("B1:C3")-Cells(i, j).Value > 0 Then
Range("Bl:C3").Cells(i, j).Value = 1 Elself Range("B1:C3")-Cells(i, j).Value < 0 Then
Range("B1:C3").Cells(i, j).Value = -1
End If
Next
Next
Если требуется задать абсолютное местоположение ячеек, то надо воспользоваться свойством Cells рабочего листа, например как в листинге 12.
Листинг 12. Абсолютное местоположение ячеек
Dim i As Integer Dim j As Integer For i = 2 To 3 For j = 1 To 3
If Cells(i, j).Value > 0 Then
Cells(i, j).Value = 1 Elself Cells(i, j).Value < 0 Then
Cells(i, j).Value = -1
End If
Next
Nex
Поиск значения в диапазоне
Метод Find объекта Range производит поиск специфицированной информации в указанном диапазоне и возвращает ссылку на первую ячейку, в которой требуемая информация найдена. В случае не обнаружения искомых данных, метод возвращает значение Nothing
Листинг 13. Поиск значения
Public Sub Poiskznacheni()
Dim rng As Range
Set rng = Range("A1:A10").Find(What:=17, LookIn:=xlValues)
If Not (rng Is Nothing) Then
MsgBox rng.Address
Else
MsgBox "не найдено значение"
End If
End Sub
Листинг 14 Поиск подстроки без учета регистра
Sub DemoFindNoMatchCase()
Dim rng As Range
Set rng = Range("A1:A10").Find(What:="BHV", LookIn:=xlValues, _
LookAt:=xlPart, MatchCase:=False)
If Not (rng Is Nothing) Then
MsgBox rng.Value
Else
MsgBox "не найдено подходяшие значение"
End If
End Sub
Повторный поиск и поиск всех значений
Метод FindNext и FindPrevious объекта Range реализует повторный вызов метода Find для продолжения специфицированного поиска. Первый из методов производит поиск следующей ячейки, а второй – поиск предыдущей, удовлетворяющей объявленным критериям поиска.
FindNext (after)
FindPrevious(after)
Здесь after- необязательный параметр, указывающий на ячейку после которой надо производить поиск.
Листинг 15. Нахождение всех вхождений подстроки в данный диапазон
Sub DemoFind()
Dim firstAddress As String
Dim rng As Range
Set rng = Range("A1:A10").Find(What:="MS", LookIn:=xlValues, _
LookAt:=xlPart, MatchCase:=False)
If Not (rng Is Nothing) Then
firstAddress = rng.Address
Do
rng.Interior.Color = RGB(255, 255, 0)
Set rng = Range("a1:a10").FindNext(rng)
Loop While Not (rng Is Nothing) And rng.Address <> firstAddress
End If
End Sub
Отсылка электронной почты
Отсылка электронной почты с данными рабочего листа может производится при помощи средств Microsoft Outlook.
Листинг 16. Отсылка электронной почты
Private Sub cmdEMail_Click()
Dim objOL As New Outlook.Application
Dim objMail As MailItem
Set objOL = New Outlook.Application
Set objMail = objOL.CreateItem(olMailItem)
With objMail
.To = Range("B1").Value
.Body = Range("B2").Value
.Subject = Range("B3").Value
.CC = Range("B4").Value
.Display
End With
Set objMail = Nothing
Set objOL = Nothing
End Sub
Условное форматирование
Условное форматирование позволяет эффективно отображать, форматируя ячейки выборочно, основываясь на их содержании.
Листинг 17. Условное форматирование
Private Sub optAverage_Click()
Dim r As Range
Set r = Range("B1:B6")
r.FormatConditions.Delete
r.FormatConditions.Add Type:=xlExpression, _
Formula1:="=B1>=СРЗНАЧ($B$1:$B$6)"
r.FormatConditions(1).Interior.Color = RGB(255, 255, 0)
End Sub
Private Sub optMax_Click()
Dim r As Range
Set r = Range("B1:B6")
r.FormatConditions.Delete
r.FormatConditions.Add Type:=xlCellValue, _
Operator:=xlEqual, _
Formula1:="$B$9"
With r.FormatConditions(1).Font
.Bold = True
.Italic = False
.Color = RGB(255, 0, 0)
End With
End Sub
Private Sub optValue_Click()
Dim r As Range
Set r = Range("B1:B6")
r.FormatConditions.Delete
r.FormatConditions.Add Type:=xlCellValue, _
Operator:=xlGreaterEqual, _
Formula1:="$G$8"
r.FormatConditions(1).Interior.Color = RGB(0, 0, 255)
End Sub
Управление стилем границы диапазона и объектами Border
Свойство Border объекта Range возвращает семейство Borders, элементы которого не инкапсулируют данные об одной из граничных или диагональных линий данного диапазона. допустимыми значениями индекса семейства Borders могут быть следующие константы xlBordersIndex: lxDiagonalDown, xlEdgeLeft, xlEdgeRight, xlEdgeTop и т.д. Каждая из этих границ представляет объект Border.
Листинг 18. Управление стилем границы диапазона и объектами Border
Public Sub DemoBorders()
'Дома работает
Dim rgn As Range
Set rng = Range("A2:C2")
With rng.Borders(xlEdgeTop)
.LineStyle = xlContinuouse
.Weight = xlThick
.Color = RGB(255, 0, 0)
End With
With rng.Borders(xlEdgeBottom)
.LineStyle = xlDash
.Weight = xlMedium
.Color = RGB(0, 255, 0)
End With
End Sub
Если компоненты границы имеют они и те же параметры , то для установки их значения можно воспользоваться не элементами , а всем семейством Borders , как это, например, делается в следующей инструкции для создания границы синего цвета у выделенной области.
Пример использования объекта Shape
Примером использования объекта Shape может быть следующий код (Листинг 19) последовательно с интервалом в одну секунду выводящии различные автофигуры, а затем с такой же скоростью их удаляющий.
Листинг 19. Последовательный вывод автофигур
Public Sub StarShow()
'дома работает
Dim w As Integer, h As Integer, i As Integer
Dim toppos As Integer, leftpos As Integer
Dim v As Long
Dim star As Shape
w = 50: h = 50
Randomize
For i = 1 To 10
toppos = Rnd() * (ActiveWindow.UsableHeight - h)
leftpos = Rnd() * (ActiveWindow.UsableWidth - w)
Select Case (i Mod 6)
Case 0
v = msoShape4pointStar
Case 1
v = msoShape5pointStar
Case 2
v = msoShape16pointStar
Case 3
v = msoShape32pointStar
Case 5
v = msoShapeDiamond
End Select
Set star = ActiveSheet.Shapes.AddShape(v, leftpos, toppos, w, h)
star.Fill.ForeColor.SchemeColor = Int(Rnd() * 56)
Application.Wait Now + TimeValue("00:00:01")
DoEvents
Next
Application.Wait Now + TimeValue("00:00:01")
For Each star In Worksheets(1).Shapes
If Left(star.Name, 9) = "AutoShape" Then
star.Delete
DoEvents
Application.Wait Now + TimeValue("00:00:01")
End If
Next
End Sub
Подбор параметра и решение уравнения с одной не известной.
Метод GoalSeek объекта Range подбирает значение параметра (неизвестной величины), являющейся решением уравнения с одной переменой. предполагается, что уравнение приведено к следующему виду: правая часть уравнения является постоянной, не зависящей от параметра, параметр входит только в левую часть уравнения, например,
x^3-3*x-5=0
Метод GoalSeek программирует выполнение команды Сервис | подбор параметра. Этот метод вычисляет корень, использую метод последовательных приближений, результат выполнения которого, зависит от начального приближения.
Точность, с которой находиться корень и предельно допустимое число используемых для нахождения корня, устанавливается свойство MaxChange и MaxIterations объекта Application. Напримкр определение корня с точностью до 0,0001 максимум за 1000 итерации устанавливает инструкцией:
With Aplication
. MaxIterations = 1000
. MaxChange = 0.0001
End With
Метод GoalSeek возвращает значение True, если решение найдено и значение False в противном случае. Например следующий код (листинг 20) ищет корень уравнения x^3-3*x-5 при начальном приближении 1
Листинг 20. Решение уравнения
Sub DemoGoalSeek()
Range("A1").Name = "x"
Range("A1").Value = 1
Range("B1").Formula = "=x^3-3*x-5"
If Range("B1").GoalSeek(Goal:=0, ChangingCell:=Range("x")) Then
MsgBox "Корень: " & Range("A1").Value
Else
MsgBox "корень не найден"
End If
End Sub
1.3 Разработка и эксплуатация автоматизированных ИС
1.3.1 Основные понятия технологии проектирования информационных систем (ИС)
Информация в современном мире превратилась в один из наиболее важных ресурсов, а информационные системы (ИС) стали необходимым инструментом практически во всех сферах деятельности.
Разнообразие задач, решаемых с помощью ИС, привело к появлению множества разнотипных систем, отличающихся принципами построения и заложенными в них правилами обработки информации.
Классификация ИС
Информационные системы можно классифицировать по целому ряду различных признаков. В основу рассматриваемой классификации положены наиболее существенные признаки, определяющие функциональные возможности и особенности построения современных систем. В зависимости от объема решаемых задач, используемых технических средств, организации функционирования, информационные системы делятся на ряд групп (классов) (рис. 1).
По типу хранимых данных ИС делятся на фактографические и документальные. Фактографические системы предназначены для хранения и обработки структурированных данных в виде чисел и текстов. Над такими данными можно выполнять различные операции. В документальных системах информация представлена в виде документов, состоящих из наименований, описаний, рефератов и текстов. Поиск по неструктурированным данным осуществляется с использованием семантических признаков. Отобранные документы предоставляются пользователю, а обработка данных в таких системах практически не производится.
Основываясь на степени автоматизации информационных процессов в системе управления фирмой, информационные системы делятся на ручные, автоматические и автоматизированные.
Рис. 1. Классификация информационных систем.
Ручные ИС характеризуются отсутствием современных технических средств переработки информации и выполнением всех операций человеком.
В автоматических ИС все операции по переработке информации выполняются без участия человека.
Автоматизированные ИС (АИС) предполагают участие в процессе обработки информации и человека, и технических средств, причем главная роль в выполнении рутинных операций обработки данных отводится компьютеру. Именно этот класс систем соответствует современному представлению понятия «информационная система».
В зависимости от характера обработки данных ИС делятся на информационно-поисковые и информационно-решающие.
Информационно-поисковые системы производят ввод, систематизацию, хранение, выдачу информации по запросу пользователя без сложных преобразований данных. (Например, ИС библиотечного обслуживания, резервирования и продажи билетов на транспорте, бронирования мест в гостиницах и пр.)
Информационно-решающие системы осуществляют, кроме того, операции переработки информации по определенному алгоритму. По характеру использования выходной информации такие системы принято делить на управляющие и советующие.
Результирующая информация управляющих ИС непосредственно














