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
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
Sub Main
'Begin Description
'Когда вы разрабатываете автоскрипт, порой, весьма утомительно вновь и вновь генерировать
'таблицу, с которой вы хотите связать выполнение автоскрипта. Используйте этот скрипт для
'моделирования ситуации возникновения таблицы, вызывающей скрипт. Просто выделите нужную таблицу в
'Output и запустите этот скрипт. Поведение будет таким же, как в реальной ситуации вызова автоскрипта,
'ассоциированного с этой таблицей. Поместите свой код, который хотите отладить, в раздел, отмеченный
'звёздочками * ниже. Запускайте этот скрипт так часто, как потребуется. После окончания отладки,
'используйте меню Create/Edit autoscript, и вставляйте отлаженный код из раздела, отмеченного
'звёздочками, в процедуру вашего автоскрипта.
'End Description

	'ДАННУЮ ЧАСТЬ ИЗМЕНЯТЬ НЕ СЛЕДУЕТ
	'вот 3 переменные, который использует автоскрипт при активизации
	Dim objPivotTable As Object
	Dim objOutputDoc As Object
	Dim lngIndex As Long
	
	Dim objItem As ISpssItem	'это просто для того, чтобы мы смогли деактивировать таблицу потом
	
	Dim bolFoundPivot As Boolean
	
	If Not GetFirstSelectedPivotForAutoscript(objPivotTable, objOutputDoc, lngIndex, objItem) Then
		Exit Sub
	End If
	
	'**********************************************************************
	'Всё будет происходить как будто был вызван автоскрипт, описанный в следующей некоторой процедуре EXPERIMENT:
	'Sub EXPERIMENT(objPivotTable As Object, objOutputDoc As Object, lngIndex As Long)
	'Вырезайте всё, что ниже следующей строки до следующих звёздочек и вставляйте ваш автоскрипт.
	'**********************************************************************
	
	'тривиальный пример для демонстрации работы.
	Dim strReport As String
	
	strReport = "Номер выделенного объекта: " & lngIndex & vbCrLf
	strReport = strReport & "Заголовок таблицы: " & objPivotTable.TitleText
	
	MsgBox strReport, vbInformation, "Автоскрипт Experiment"
	
	'**********************************************************************
	'Вырезайте всё, что выше предыдущей линии до строки звёздочек и вставляйте ваш автоскрипт.
	'**********************************************************************
	objItem.Deactivate
End Sub


Function GetFirstSelectedPivotForAutoscript(objPivotTable As Object, objOutputDoc As Object, lngIndex As Long, objItem As ISpssItem) As Boolean
'Цель: находит первую выделенную сводную таблицу и возвращает объектные переменные, как будто был вызван автоскрипт
'Условия: Сводная таблица в окне результатов выделена
'Эффект: Активирует выделенную сводную таблицу
'Входящие: Объект PivotTable, объект Item, содержащий выделенную PivotTable
'Исходящие: Выделенная PivotTable, объект Output Document, индекс объекта Item,
'		объект Item в окне результатов
'		Принимает значение True (истина) если всё удачно

	Dim objDocuments As ISpssDocuments     	' документы SPSS.
	Dim objItems As ISpssItems       		' объекты Output Navigator (окна результатов)
	Dim intItemCount As Integer
	Dim intItemType As Integer
	Dim bolSelected As Boolean             	' True (истина), если объект выделен.
	Dim i As Integer
	
	'Получаем перечень документов SPSS.
	Set objDocuments = objSpssApp.Documents
	
	' Если есть хотя бы одно окно результатов, получаем ссылку на активное окно результатов.
	If objDocuments.OutputDocCount > 0 Then
	   'ссылка на активное окно результатов.
	   Set objOutputDoc = objSpssApp.GetDesignatedOutputDoc
	Else
		'если нет окон результатов.
		MsgBox( "Не найдено окон результатов." )
		GetFirstSelectedPivotForAutoscript = False
		Exit Function
	End If
	
	' Пока не нашли сводную таблицу (установим заранее флаг)
	bolFoundPivot = False

	' ссылаемся на перечень объектов и узнаём их количество:
	Set objItems = objOutputDoc.Items
	intItemCount = objItems.Count

	' Ссылаемся на первую выделенную сводную таблицу.
	For i = 0 To intItemCount - 1
		Set objItem = objItems.GetItem(i)
		intItemType = objItem.SPSSType
		bolSelected = objItem.Selected
		If intItemType = SPSSPivot And bolSelected Then 
			Set objPivotTable = objItem.ActivateTable()  	'активизируем сводную таблицу.
			lngIndex = i
			bolFoundPivot  = True	                  	' Нашли сводную таблицу.
			Exit For                                  	' Заканчиваем цикл.
        End If
	Next i

	If Not bolFoundPivot Then
		'Если не выделена ни одна сводная таблица.
		MsgBox "Выделите сводную таблицу (того типа, который нужен для вашего автоскрипта) перед запуском отладки.", vbExclamation
		GetFirstSelectedPivotForAutoscript = False
		Exit Function
	End If
	
	GetFirstSelectedPivotForAutoscript = True

End Function