Подсветка значимых уровней во всех таблицах ANOVA в назначенном окне результатов
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 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 | ' Подсветка значимых уровней во всех таблицах ANOVA (в результатах дисперсионного анализа) ' в назначенном окне результатов (Designated Viewer). ' Автор: Raynald Levesque для Manfred Straehle, 30.01.2004. 'Размещено: http://www.spsstools.ru/Scripts/PivotTables/HighlightsSigCellsOfAllAnovaTablesInDesignatedViewer.txt (.sbs). 'Перевод: А. Балабанов, 02.01.2009. 'Проверено: SPSS 15.0.1.1. Sub Main Dim objPivot As PivotTable Dim objItem As ISpssItem Dim strLabel As String strLabel="ANOVA" Do While GetNextPivot(objPivot, objItem, strLabel) Call Highlight(objPivot, objItem) Loop End Sub '################## Const cSigVal=.005 '################## Const TextTotalStr ="Sig." Const cGREEN = RGB(60, 179, 113) Const cWHITE = RGB(255,255,255) Sub Highlight(objPivotTable As PivotTable , objItem As ISpssItem) '### строка удалена - А.Б. Dim bolPivotSelected As Boolean Dim s_bolCellsSelected As Boolean 'значение этой переменной истинно, если в результате поиска были выделены какие-либо ячейки s_bolCellsSelected = False Dim objDataCells As ISpssDataCells Dim lngNumRows As Long Dim lngNumColumns As Long Set objDataCells = objPivotTable.DataCellArray ' Цикл по ячейкам. Затеняем те ячейки, значения в которых меньше, чем в константе cSigVal: Dim objRowLabels As ISpssLabels ' массив меток строк Set objRowLabels = objPivotTable.RowLabelArray Dim objColLabels As ISpssLabels ' массив меток столбцов Set objColLabels = objPivotTable.ColumnLabelArray lngNumRows = objDataCells.NumRows lngNumColumns = objDataCells.NumColumns Dim I As Integer, J As Integer 'objItem.Deactivate - удалено - А.Б. For I = 0 To lngNumRows -1 Dim dummy As Integer For J = 0 To lngNumColumns -1 If InStr (objColLabels.ValueAt(objColLabels.NumRows-1,J), TextTotalStr)> 0 Then If Len(objDataCells.ValueAt (I,J)) > 0 Then If objDataCells.ValueAt (I,J) <= cSigVal Then objDataCells.BackgroundColorAt (I,J) = cGREEN Else objDataCells.BackgroundColorAt (I,J) = cWHITE End If Else objDataCells.BackgroundColorAt (I,J) = cWHITE End If End If Next Next ' деактивация мобильной таблицы и выход 'objItem.Activate - удалено - А.Б. objItem.Deactivate End Sub Function GetNextPivot( objPivot As PivotTable, _ objItem As ISpssItem, _ strLabel As String ) As Boolean 'Назначение: нахождение следующей мобильной таблицы 'Условия: в окне Навигатора находятся таблицы; окно не меняет своего содержимого между вызовами функции 'Действия: каждый раз при вызове функции она выделяет и активирует следующую мобильную таблицу 'Входные данные: объект PivotTable (мобильная таблица), объект Item (элемент)-контейнер выделенной мобильной таблицы 'Выходные данные: активированная мобильная таблица, указание на выделенный элемент, функция возвращает значение "истина", если мобильная таблица найдена 'Заметьте, что функция содержит статические переменные, что позволяет осуществлять контроль перебора таблиц в окне результатов 'непосредственно в самой функции (информация о текущем положении курсора не теряется между вызовами функции). 'Кроме того, функция не только возвращает в процедуру Main своё "основное" значение (Истина/Ложь), но и переопределяет значения 'переменных objPivot и objItem, которые далее используются процедурой Main при вызове следующей процедуры (Highlight). 'При первом вызове статические переменные ещё не определены; функция контролирует это и определяет их, если требуется - примеч. перев. Static objDocuments As ISpssDocuments ' коллекция документов SPSS. Static objOutputDoc As ISpssOutputDoc ' документ выдачи (результатов, Output) Static objItems As ISpssItems ' коллекция элементов окна выдачи (Output Navigator) Static intItem As Integer ' индекс элемента окна Output Navigator Static intItemCount As Integer ' общее число элементов в окне выдачи Dim intItemType As Integer Dim bolSelected As Boolean ' истина, если элемент выделен Dim bolReset As Boolean Dim I As Integer ' инициализация выходных значений GetNextPivot = False Set objPivot = Nothing Set objItem = Nothing ' если это первый вызов, установим флаг, сигнализирующий о необходимости инициализации ряда переменных If (objDocuments Is Nothing) Or (objOutputDoc Is Nothing) Or (objItems Is Nothing) Then bolReset = True End If If bolReset Then 'получим перечень документов в SPSS. Set objDocuments = objSpssApp.Documents End If ' закончена обработка перечня документов If bolReset Then ' Получаем ссылку на документ результатов только если есть хотя бы один такой документ If objDocuments.OutputDocCount > 0 Then 'Ссылка на назначенное окно результатов Set objOutputDoc = objSpssApp.GetDesignatedOutputDoc Else 'если нет окон результатов MsgBox( "Не найдено окна результатов!" ) Exit Function End If End If ' закончили с документом результатов ' Ссылка на дерево элементов и подсчёт их числа If bolReset Then Set objItems = objOutputDoc.Items intItemCount = objItems.Count End If ' чтобы не создать проблем, если что-то не так, контролируем, что нужные переменные определены If (objDocuments Is Nothing) Or (objOutputDoc Is Nothing) Or (objItems Is Nothing) Then Debug.Print "Переменная objDocuments не определена (Nothing): " & (objDocuments Is Nothing) Debug.Print "Переменная objOutputDoc не определена (Nothing): " & (objOutputDoc Is Nothing) Debug.Print "Переменная objItems не определена (Nothing): " & (objItems Is Nothing) MsgBox "Произошли ошибки при работе с документом результатов.", vbExclamation, "Функция GetNextPivot" Exit Function End If ' контроль того, что документ не изменился между вызовами (на основе подсчёта числа элементов) If intItemCount <> objItems.Count Then MsgBox "Содержимое окна результатов неожиданно изменилось во время выполнения скрипта.", vbExclamation, "Функция GetNextPivot" Exit Function End If If bolReset Then intItem = 0 End If ' Активация следующей мобильной таблицы с нужным заголовком For I = intItem To intItemCount - 1 Set objItem = objItems.GetItem(I) intItemType = objItem.SPSSType If intItemType = SPSSPivot And InStr(objItem.Label,strLabel)>0 Then intItem = I + 1 'запоминаем состояние счётчика цикла Set objPivot = objItem.ActivateTable() 'активация мобильной таблицы GetNextPivot = True 'нужная таблица найдена Exit For 'выход из цикла End If Next I If GetNextPivot = False And intItem = 0 Then 'не было обнаружено мобильных таблиц MsgBox( "В окне результатов не обнаружено мобильных таблиц." ) Exit Function End If End Function |