1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
'Поиск по меткам объектов в окне выдачи

'Begin Description
'Скрипт осуществляет поиск заданной строки в левой панели ("дереве" выдачи) окна результатов
'(поиск по так называемым "меткам" объектов выдачи). Поиск происходит без учёта регистра, совпадение фиксируется с любой частью метки.
'После нахождения метки скрипт выделяет объект с совпавшей меткой и запрашивает у пользователя:
'искать ли дальше другие объекты, или останавливаться.
'Условия: документ выдачи (output) должен быть открыт.
'Для удобства частого использования лучше "привязать" этот скрипт к кнопке на панели инструментов.
'End Description

'Автор: Raynald Levesque, 23.01.2003.
'http://www.spsstools.ru

'Перевод: А. Балабанов, 20.11.2008.
'Проверено: SPSS 15.0.0.

Option Explicit

Sub main
	Call SearchLabel()
End Sub


Sub SearchLabel()

	Dim objOutputDoc As ISpssOutputDoc
	Dim objOutputItems As ISpssItems
	Dim objOutputItem As ISpssItem
	Dim bolFound As Boolean
	Dim strTitle As String
	Dim cnt As Integer

	On Error GoTo Oopps
	bolFound = False

	' запрос строки поиска
	strTitle=UCase(InputBox("Введите метку","Поиск объекта выдачи с указанной меткой"))
	If Len(strTitle)=0 Then	Exit Sub

	' Установка ссылки та текущий документ выдачи и коллекцию объектов в нём
	Set objOutputDoc = objSpssApp.GetDesignatedOutputDoc
	Set objOutputItems = objOutputDoc.Items
	objOutputDoc.ClearSelection

	' Цикл по всем объектам
	For cnt = 0 To objOutputItems.Count - 1
		Set objOutputItem = objOutputItems.GetItem(cnt)
		Debug.Print objOutputItem.Label
		If InStr(UCase(objOutputItem.Label),strTitle) > 0 Then
			bolFound = True
			objOutputItem.Selected = True
			If Len(InputBox("Нажмите OK, если надо продолжить, 'Отмена', если надо остановиться","Продолжить поиск?","найден объект!")) =0 Then
				Exit Sub
			End If
			objOutputItem.Selected = False
		End If
	Next
	If bolFound =False Then
		MsgBox("Нет объектов с метками, содержащими: " & strTitle)
	Else
		MsgBox("Больше не найдено объектов с метками, содержащими: " & strTitle)
	End If
Exit Sub

Oopps:
	MsgBox Err.Number & " " & Err.Description	   'в случае ошибки: информируем об ошибке пользователя
	Debug.Print Err.Number & " " & Err.Description 'информация для отладки
	'Resume Next 'используем опцию игнорирования ошибок когда отлаживаем скрипт
End Sub