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
'BEGIN DESCRIPTION
'Назначение: Изменение заголовка последней вызванной процедуры и её метки в схеме вывода (на панели навигации результатов).
'END DESCRIPTION

Sub Main
'Заголовок: ChangeLabelTitleOfLastRunProcedure.sbs
'Автор: Michael Wexler, mailto:wexler at yahoo.com
'Условия: открыто окно результатов.
'Действие: пробегается снизу вверх по дереву созданных результатов, ищет заголовок процедуры и её метку, после чего
'	  заменяет их заданным текстом.
'     Может быть использован для расстановки пометок в окне результатов типа
'	  "фильтр по мужчинам" или "без учёта пропущенных значений", или иных подобных комментариев.
'Входные параметры: текст, который используется для замены заголовка.
'Выходные параметры: нет
'Вызов: SCRIPT file="c:\\my documents\\ChangeLabelTitleOfLastRunProcedure.sbs" ("Исправленный заголовок") .
' Примеч.:   Метка процедуры появлется только в схеме вывода (панели навигации), заголовок же процедуры появляется
'			 как в схеме вывода, так и в самом окне результатов. См. пояснения из справки SPSS:
' Из файла помощи, раздел SPSSType Property:
' Свойство SPSSType имеет значение "2" для SPSSHead, и вы можете изменить только метку этого элемента, которая появляется
' только в дереве результатов (схеме выдачи).
' Собственно заголовки имеют значение "9" (SPSSTitle), и вы можете изменить как их метку (в схеме вывода), так и их содержание,
' которое отображается в окне результатов.
'           Внимание: если вызов процедуры заканчивается ошибкой (неправильное имя переменной и т.д.),
'			скрипт не обнаружит этого и может поменять заголовок не у того элемента.
'

'Получим указатель на окно результатов и сделаем его видимым, чтобы иметь возможность
'увидеть изменение заголовка.
Set objOutputDoc = objSpssApp.GetDesignatedOutputDoc
objOutputDoc.Visible = True

Dim strParam As String
strParam = objSpssApp.ScriptParameter(0)

'Получим указатель на перечень объектов Output Items
Set objOutputItems = objOutputDoc.Items()
Dim intItemCount As Integer 'Число объектов в окне результатов.
Dim intItemType As Integer 'Тип объекта.
Dim strItemTitle As String 'Текст строки заголовка, который мы хотим найти и изменить.
Dim objSpssText As Object

'Получим последний созданный заголовок, взбираясь вверх по дереву созданных объектов, до тех пор, пока не найдём
'объект типа Title на втором уровне.
intItemCount = objOutputItems.Count
For Index = intItemCount - 1 To 0 Step -1
	Set objOutputItem = objOutputItems.GetItem(Index)
	intItemType = objOutputItem.SPSSType
	If intItemType = SPSSTitle And objOutputItem.Level=2 Then
		'Debug.Print intItemType & " должен быть равен " & SPSSTitle
		Set objSpssText = objOutputItem.Activate
		objSpssText.Text = strParam
		objOutputItem.Deactivate
		objOutputItem.Label=Left(strParam, 35)
		'Если нашли заголовок, поднимаемся ещё на один уровень вверх и меняем метку на самом верхнем уровне.
		Index=Index-1
		Set objOutputItem = objOutputItems.GetItem(Index)
		objOutputItem.Label=Left(strParam, 35)
		Exit For
	End If
Next

End Sub