Разработка приложений



         

Разработка приложений с помощью Excel 97 и VBA - часть 8


ШАГ 6. Учитывая все это, после загрузки модулей PARSESUB.BAS и INSTRREV.BAS (команда File|Import File), которые преобразятся в компоненты Module1 и Module2 нашего проекта, мы выполним следующие операции. Скопируем текст процедуры ParseString из Module1 в Module (выделив текст, а затем записав его в буфер обмена и восстановив оттуда). Затем удалим Module1 (оставшиеся там процедуры нам не понадобятся), а Module2 переименуем в Service (см. листинг 4).

Листинг 4. Текст модуля кода Service

Attribute VB_Name = “Service”

DefInt I-N

Sub FileNameTest(PathFile$, Path$, File$)

‘ Вход: PathFile$ - полное имя файла

‘ Выход: Path$ - имя каталога

‘ File$ - имя файла

in1 = InstrReverse(PathFile$, “\”)

If in1 <= 0 Then

Path$ = “”: File$ = PathFile$

Else

Path$ = LEFT$(PathFile$, in1)

File$ = Mid$(PathFile$, in1 + 1)

End If

End Sub

Function InstrReverse(Text$, Key$)

‘ поиск ПОСЛЕДНЕГО (а не первого, как в INSTR)

‘ контекста в строке, Text$ - исходная строка

‘ Key$ - разделитель в строке

in1 = InStr(Text$, Key$)

If in1 > 0 Then

Do While in1 < Len(Text$)

in2 = InStr(in1 + 1, Text$, Key$)

If in2 <= 0 Then Exit Do Else in1 = in2

Loop

End If

InstrReverse = in1

End Function

Function ParseString(s$, del$, n) As String

‘ синтаксический анализ строки на наличие разделителя,

‘ возвращает n-ое значение

Dim pos As Long, i As Integer, pos2 As Long

ParseString = s$

pos = InStr(s$, del$)

If pos Then ‘ если есть del$

If n = 1 Then

ParseString = LEFT$(s$, pos - 1)

Else

For i = 1 To n - 1 ‘ подсчет элементов данных

pos2 = InStr(pos + 1, s$, del$)

If pos2 = 0 Then ‘ конец строки

If i = n - 1 Then

ParseString = Trim(Mid$(s$, pos + _

Len(del$)))

‘ длина разделителя

Else

ParseString = “”

‘ n-ый элемент данных не найден

End If

Exit Function

End If

ParseString = Trim(Mid$(s$, pos + Len(del$), _

pos2 - pos - Len(del$)))

pos = pos2

Next

End If

ElseIf n > 1 Then

ParseString = “” ‘ n-ый элемент данных не найден

End If

End Function




Содержание  Назад  Вперед