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
'Поиск/замена в окне редактора синтаксиса.
Option Explicit

Sub Main
' Скрипт ищет указанный блок текста в окне синтаксиса и заменяет его другим блоком.

' Указания к запуску:
' Введите целевые строки (которые следует заменить) в начало окна назначения синтаксиса.
' Введите два обратных слеша (\\\\) в начало следующей за ними строки
' Введите строки, которыми будут заменены целевые строки, начиная ввод сразу после символов \\\\
' Введите два обратных слеша (\\\\) в начало следующей за ними строки
' Не оставляйте в строках вашего кода концевых пробелов

' Предупреждение:
' После первой замены скрипт проведёт замену и во всех последующих строках
' совпадающих с целевыми.

' Размещено в новостной группе spss 10.09.2003. Автор: Raynald Levesque.

	Dim objSyntaxDoc As ISpssSyntaxDoc
	Dim strSynCmd As String
	Dim intPos As Integer
	Dim strScript As String
	Dim strReplace As String
	Dim strFind As String

	Set objSyntaxDoc=objSpssApp.GetDesignatedSyntaxDoc
	Debug.Print objSyntaxDoc.GetDocumentPath

	'Сохраним синтаксис, который находится в окне назначения синтаксиса
	'(если обнаружится некорректная замена, её можно будет "отменить",
	'заново загрузив сохранённый файл синтаксиса).
	If objSyntaxDoc.GetDocumentPath <> "" Then
		objSyntaxDoc.SaveAs (objSyntaxDoc.GetDocumentPath)
	Else
		MsgBox ("Сохраните синтаксис из окна назначения, " & vbCrLf & "затем попытайтесь снова.")
		Exit Sub
	End If
	Debug.Clear

	strSynCmd = objSyntaxDoc.Text

	Debug.Print strSynCmd
	strFind = Left(strSynCmd,InStr(strSynCmd,"\\\\") - 1)
	Debug.Print "strFind=" & vbCrLf & strFind

	'Redefine rest of syntax
	strSynCmd = Mid(strSynCmd,InStr(strSynCmd,"\\\\") + 2)
	Debug.Print "Rest of syntax " & vbCrLf & strSynCmd

	strReplace = Left(strSynCmd,InStr(strSynCmd,"\\\\") - 1)
	Debug.Print "Replace by" & vbCrLf & strReplace

	'Redefine rest of syntax
	strSynCmd = Mid(strSynCmd,InStr(strSynCmd,"\\\\") + 3)
	Debug.Print "Rest of syntax " & vbCrLf & strSynCmd

	strSynCmd=Replace(strSynCmd,strFind,strReplace)
	Debug.Print strSynCmd

	objSyntaxDoc.Text = strFind & "\\\\" & vbCrLf & strReplace & "\\\\" & vbCrLf & strSynCmd
	Set objSyntaxDoc=Nothing
End Sub