Рефераты. Организация документооборота с помощью "Visual Basic for Application"

msoFileTypeOfficeFile

msoFileTypeTarkItems

msoFileTypeVisioItems

msoFileTypeWordDocuments


- свойство  FoundFile возвращает объект FoundFiles, представляющий собой список имен всех найденных в течение поиска файлов.

Метод Execute объекта Application производит непосредственный поск. Он возвращает целое число, причем , если оно равно 0, то ни одного файла не было найдено, а если положительное , то найден , по крайней мере, один файл.


Листинг 6. Поиск рабочих книг в корневом каталоге диска С

With Application. FileSearch

.LookIN = “C:\”

.FileType= msoFileTypeExcelWordBooks

If.Execute (SortByFileName._

Sortorder: msosoftorderabcending)>0 Then

Dim str As string

Str = “Найдено” & .FoundFile.Count & “

Dim I as integer

Int= I to FoundItem.Count

Str= str &. FoundFile (i) & vthcr

Next

MsgBox str

Else

MsgBox “Рабочие книги не найдены”

End if

End with

 

Симулирование ячеек рабочего листа

Метод Evaluate позволяет симулировать работу с ячейками или диапазонами рабочего листа без реального воплощения этих действий на рабочем листе.


Листинг 7. Симулирование ввода данных в ячейки и считывание из них значений

Public Sub Simur()

Evaluate("A1").Value = 25

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")

Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.