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
'Ниже даётся пример того, как программно можно последовательно открыть
'17 архивированных .zip-файлов и выполнить для каждого из них какие-то команды.
'Это скрипт для SPSS.
'Автор: Rafael Osorio, опубликовано в новостной группе SPSS 31.01.2000
  
Option Explicit
Dim objSpssApp As Object
Dim strCommands As String
Dim idx As Integer
Dim PnadZip, PnadSav, PnadAge
  
Sub Main
 
'Матрица с именами .zip-файлов
 
PnadZip = Array ("PNAD76Familia.zip", "Pnad77Familia.zip", "PNAD78Familia.zip", "PNAD81Familia.zip",
"PNAD82Familia.zip", "PNAD84Familia.zip",
"PNAD85Familia.zip", "PNAD86Familia.zip",
"PNAD87Familia.zip", "PNAD88Familia.zip",
"PNAD89Familia.zip", "PNAD90Familia.zip",
"PNAD92Familia.zip", "PNAD93Familia.zip",
"PNAD95Familia.zip")
 
ReDim Preserve PnadZip (17)
PnadZip(15) = "PNAD96Familia.zip"
PnadZip(16) = "PNAD97Familia.zip"
 
 
'Матрица с именами соответствующих .sav-файлов, вместо .zip.
 
PnadSav = Array ("PNAD76Fam.sav", "Pnad77Fam.sav", "PNAD78Fam.sav", "PNAD81Fam.sav", "PNAD82Fam.sav", "PNAD84Fam.sav", "PNAD85Fam.sav", "PNAD86Fam.sav", "PNAD87Fam.sav", "PNAD88Fam.sav", "PNAD89Fam.sav", "PNAD90Fam.sav", "PNAD92Fam.sav", "PNAD93Fam.sav", "PNAD95Fam.sav")
 
ReDim Preserve PnadSav (17)
PnadSav(15) = "PNAD96Fam.sav"
PnadSav(16) = "PNAD97Fam.sav"
 
 
'Матрица имён переменных, которые специфичны для каждого из файлов
'(т.е. в каждом файле есть 1 переменная с уникальным именем, остальные переменные - общие для всех файлов)
PnadAge = Array ("v2105", "v173", "v2805", "v805", "v805", "v805", "v805", "v805", "v805", "v805", "v805",  "v805", "v03034", "v03034", "v03034") 
 
ReDim Preserve PnadAge (17)
PnadIdade(15) = "v8005"
PnadIdade(16) = "v8005"
 
Set objSpssApp = CreateObject("SPSS.Application")
 
For idx = 0 To 16
 
	'Вызываем распаковщих архива (он должен находиться в указанной ниже папке)
	 
	Shell("C:\\pkunzip c:\\pnadsfamilia\\" & PnadZip(idx) &" " &PnadSav(idx) &" C:\\pnadsfamilia")
	 
	'Ждём, пока распаковка завершится; Соответствующий .pif-файл должен быть настроен на то,
	'чтобы закрыть окно DOS по завершении
	 
	 
	While idx = idx
	On Error GoTo desvio
	AppActivate "pkunzip"
	Wend
	 
	desvio:
	 
	'Составляем подходящую команду для SPSS
	 
	strCommands = "GET FILE = 'c:\\pnadsfamilia\\" &PnadSav(idx) &"' /KEEP pesfam tpfamfp sitdom sitfam nfd paren nagreg npensi nempre npaemp " PnadAge(idx) &" ."
	 
	'Выполняем команду
	 
	objSpssApp.ExecuteCommands strCommands, False 
	 
	'Ждём, пока выполнится
	 
	While objSpssApp.IsBusy
	Wend
	 
	'Далее можно вызвать процедуру, которая запустит нужные команды обработки файла,
	'либо написать эти команды прямо здесь. Так, например:
	 
	strCommands = "NEW FILE."
	objSpssApp.ExecuteCommands strCommands, False 
	 
	While objSpssApp.IsBusy
	Wend
	 
	'удаляем распакованный файл, переходим к обработке следующего.
	Kill "c:\\pnadsfamilia\\" &PnadSav(idx)
Next idx
End Sub