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
'Заголовок:
'Установка числа десятичных знаков при отображении процентов сводных таблицах (Pivot Table)

'Описание:
'Вопрос.
'Допустим, я использую версию SPSS 7.5 и выше.
'Мне требуется устанавливать число десятичных знаков при выводе процентов в сводных таблицах.
'Есть возможность автоматизировать этот процесс?

'Ответ.
'Внизу приводится текст, который производит изменения в выделенной таблице.
'Процедура Sub Main может быть модифицирована. Однако, функция SetDecimalDigits вряд ли потребует
'изменений, независимо от того, будет ли она использоваться из ваших скриптов, или вызываться из
'процедуры Autoscript.
'Этот скрипт - модификация решения из AnswerNet, ID:  100007757
'Размещено в SPSSX-L 11.3.2003. Автор: Raynald Levesque

'Начало описания
'Функция SetDecimalDigits устанавливает формат ячейки для всех процентных значений с заданным
'числом десятичных знаков.
'Конец описания

Sub Main()
Dim objPivot As PivotTable
Dim objItem As ISpssItem
'Сводная таблица должна быть активирована
Dim bolFoundOutput As Boolean, bolFoundPivot As Boolean

GetFirstSelectedPivot objPivot, objItem, bolFoundOutput, bolFoundPivot
If Not (bolFoundOutput And bolFoundPivot) Then
Exit Sub
End If
'отложим перерисовку экрана пока не закончим преобразования
objPivot.UpdateScreen = False

'установим форматы всех ячеек в 2 знака после запятой
Call SetDecimalDigits(objPivot, 2)

objPivot.UpdateScreen = True
objItem.Deactivate
'иногда высота и ширина сводной таблицы подгоняется некорректно
'в таком случае повторная активация таблицы, как правило, помогает.
objItem.ActivateTable
objItem.Deactivate
End Sub


Sub SetDecimalDigits(objPivot As PivotTable, intDigits As Integer)
'Изменяем число десятичных знаков для всех ячеек, содержащих "%"
Dim lngRow As Long, lngCol As Long
Dim objDataCells As ISpssDataCells

Set objDataCells = objPivot.DataCellArray
	With objDataCells
		For lngRow = 0 To .NumRows - 1
			For lngCol = 0 To .NumColumns - 1
			If Not IsNull (.ValueAt (lngRow, lngCol)) Then
				If InStr(.NumericFormatAt(lngRow,lngCol),"%")>0 Then
					.HDecDigitsAt (lngRow, lngCol) = intDigits
				End If
			End If
			Next
		Next
	End With
objPivot.Autofit
End Sub