2013-03-20 27 views
0

以下脚本是用'Winwrap basic'编写的,它几乎与VBA相同。 我希望这个脚本能够在SPSS 20上工作,该脚本在SPSS15上工作正常(通过将文件扩展名从STT更改为TLO,因为那是tablelook文件当时的情况)。从BASIC版本15到版本20的SPSS脚本

但是,无论何时我在SPSS 20中运行此脚本时,wwb处理器都会崩溃,并显示一条通用错误消息'WWBProcessor遇到问题并需要关闭。对此造成的不便,我们表示歉意。'

该脚本有很好的评论,但脚本的目的是通过依次激活每个表并将表设置为用户指定的表,来改变输出查看器窗口中每个表的tablelook内部列标签,关闭表格并激活下一个表格。 循环继续,直到每个表已被设置为新的tablelook和旋转。

手动设置几百张表的旋转是艰巨的,非常耗时,更不用说麻烦无聊了。这个脚本用于在15年后的几秒钟内完成这项任务,但是不断变化的需求和对旧版本的支持不足,意味着我被迫使用更新的版本。

我很感激任何帮助。 微型飞行器

Option Explicit 

Sub Main 
'BEGIN DESCRIPTION 
'This script changes all tabs to the same 'Tablelook' style. You will be prompted to choose the tablelook file. 
'END DESCRIPTION 
'****************** 
'Old description 
'This script assumes that objSpssApp ist the currently running 
'SPSS-Application and assigns every existing Pivot Table 
'in the Output Navigator a new TableLook which can be selected 
'from a Dialog box. Hidden tables will also be affected. 
'Originally Created by SPSS Germany. Author: Arnd Winter. 
'****************** 
'This script is written in the BASIC revision 'WinWrap Basic' code copied from VB or other basic languages may have to be modified to function properly. 

On Error GoTo Bye 

' Variable Declaration 
' For an undertermined reason scripts cannot be executed throught the Utilites -> Run scripts menu, 
' Instead they must be opened like a syntax file and ran from the SPSS 19 Scripting page. 
' Functionality on SPSS 20 is now completely gone, error message only reads 'WWB processor has encountered a problem and needs to close'. 
Dim objOutputDoc As ISpssOutputDoc 'Declares the Output variable 
Set objOutputDoc = objSpssApp.GetDesignatedOutputDoc 'Assigns currently active output to Output variable 
Dim strAppPath As String 
Dim objOutputItems As ISpssItems 'variable defining every item in the current output window 
Dim objOutputItem As ISpssItem 'variable defining the current item 
Dim objPivotTable As PivotTable 
Dim intCount As Integer 'declare the variable that will store the number of instances 
Dim varStrLook As String 
Set objOutputItems=objOutputDoc.Items 
Dim i As Integer 'for loops we need an INT variable that will be counted against the number of instances 'i' is standard notation 
' Find out SPSS Directory 
strAppPath = objSpssApp.GetSPSSPath 

' Select TableLook 

'The Parametres you must enter into the GetFilePath() function are as follows: 
'(Optional)Firstly you enter the initial file name (if none is required use an asterisk * and the file extention, or *.*) 
'(Optional)The second part is the file extention expected, you can choose multiple filetypes if you seperate them with a semi-colon ; 
'(Optional)The third parametre is the directory where the file should be opened.(default - Current path) 
'The fourth parametre is the Title of the prompt, which should be enclosed in speech marks. 
'The Final parametre is the 'Option' 
'0 Only allow the user to select a file that exists. 
'1 Confirm creation when the user selects a file that does not exist. 
'2 Allow the user to select any file whether it exists or not. 
'3 Confirm overwrite when the user selects a file that exists. 
'+4 Selecting a different directory changes the application's current directory. 
'For more detailed information visit the WWB website. 
' http://www.winwrap.com/web/basic/language/?p=doc_getfilepath__func.htm 
varStrLook = GetFilePath$("*.stt","stt",strAppPath,"Select Tablelook and confirm with Save.",4) 
' Tested re-applying the dollar sign, cofusingly removing or adding the Dollar sign ($) 
' seems to have no effect. 

' If user presses Cancel or selected a file with the wrong file type then exit script 
If (Len(varStrLook)= 0) Or (Right(varStrLook,3)<>"stt") Then 
    Exit Sub 
End If 

' Loop which assigns a new TableLook to all existing Tables. 
intCount = objOutputItems.Count 'Assigns the total number of output items to the count-marker 
For i = 0 To intCount-1 'Start loop 
    Set objOutputItem=objOutputItems.GetItem(i) 'Get current item 
    If objOutputItem.SPSSType=SPSSPivot Then 'If the item is a pivot table then... 
     Set objPivotTable=objOutputItem.ActivateTable 'Activate the table for editing 
     objPivotTable.TableLook = varStrLook 'Apply the earlier selected table look. 
     objPivotTable.RotateColumnLabels=True 'Rotate collumn lables 
     objOutputItem.Deactivate 'Confirm changes and deactivate the table 
    End If 
Next 'End loop 
'******************************************************** 
'Updated script from Version 15 -> 
'Script now includes inner column label rotation 
'Script has been modified and adapted to improve performance 
'and to help people who wish to use/adapt the script 
'in future endeavours. 
'******************************************************** 
Bye: 
End Sub 

回答

1

尝试的第一件事就是更换 的激活/停用电话GetTableOLEObject 这是更有效,而且不需要枢轴表编辑器,但你可以做所有的事情,你可以在激活的桌子上做。

如果您还没有V20,fixpack2的当前修复包,那么安装它也不失为一个好主意。

+0

我到底该怎么做?我对该方法的文档说'当你使用这种方法得到一个对象时,你可以执行通常在大纲视图中执行的任务。要编辑数据透视表,请使用ActivateTable方法.' 因此,从写入的内容来看,无论如何,我仍然必须激活/停用对象。 – 2013-03-21 15:00:21

+0

但是我发现当我使用脚本编辑器的脚本编辑器的功能时,程序跳出了第30行,'Set objOutputItems = objOutputDoc.Items'我找到了这一行没有问题。 – 2013-03-21 15:10:28