'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