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
'begin description
'Назначение: Обеспечить вызов макроса для каждой метки значения данной переменной.
'Условия: 	в редакторе данных открыт набор данных,
'			папка "c:\\temp" существует.
' В данном примере вызов макроса осуществляется по одному разу для каждой метки значения переменной "mdotco"
' Макрос именуется как !macro и требует для запуска указания 2 параметров:
'    cty  = значение
'    name = метка значения.
'end description



'Автор: Raynald Levesque, 03.06.2004
'Сайт по SPSS: http://www.spsstools.ru

' Перевод: А. Балабанов, 14.11.2008.
' Проверено: SPSS 15.0.0.
' Скрипт не создаёт макрос !macro, он лишь формирует синтаксис для его запуска с отдельными параметрами - примеч. перев.

Const cVARNAME As String ="mdotco"
Option Explicit


Sub Main
	' Объявление переменных скрипта и ссылки на объект SpssInfo:
	Dim objSpssInfo As ISpssInfo
	Dim i As Integer, j As Integer
	Dim lngLength As Long
	Set objSpssInfo = objSpssApp.SpssInfo
	Open "C:\\temp\\macro calls.sps" For Output As #1

	Dim ValCount As Integer
	With objSpssInfo
		For i = 0 To .NumVariables - 1
			If .VariableAt(i) = cVARNAME Then
				' Обработка значений и их меток
				ValCount = .NumberOfValueLabels(i)
				If ValCount > 0 Then
					If  .VarType(i) = SpssDataString Then
						For j = 0 To ValCount - 1
							Print #1,"!macro cty='" & .ValueAt(i, j) & "'  name='" & .ValueLabelAt (i, j) & "'."
						Next
						Else
						For j = 0 To ValCount-1
							Print #1,"!macro cty=" & .ValueAt(i, j) & " name='" & .ValueLabelAt (i, j) & "'."
						Next
					End If
				End If
			End If
		Next i
	End With
	Close #1
	objSpssApp.ExecuteInclude ("c:\\temp\\macro calls.sps",False)
	Set objSpssInfo = Nothing
End Sub