做一个简单例子:
在Macro中增加一个函数
function dosomeTest()
'如果取消Msgbox注释,8.20+版本不执行
'msgbox test
end function
在Load Script定义
Let abc = dosomeTest();
Case1: 如果'msgbox test修改为msgbox test。
在Qv8.01版本执行会弹出一个对话框 显示“Test”。但如果在Qv8.20以后,该功能会导致abc变量为Null。
原因分析:Qv8.20开始,Script访问Macro不再支持对ActiveDocument的访问,虽然没有提Msgbox全称可以这样写ActiveDocument.GetApplication.MsgBox("Test")。所以也属于不支持之列。
Case2:如何在Script中获取当前文档的报表
Qv8.01版本写法:
Macro:
function countReports
set ri = ActiveDocument.GetDocReportInfo
end function
function getReportInfo (i)
set ri = ActiveDocument.GetDocReportInfo
set r = ri.Item(i) & "," & r.Name & CHR(10)
end function
Script:
let noOfReports = countReports();
For i = 0 to noOfReports-1
let reportInfo = getReportInfo($(i));
reportInfo:
Load * INLINE [
reportID, reportName
$(reportInfo)];
Next
Qv8.20+版本写法:
为了满足对类似上述的需求,Qv增加了函数:NoOfTables, TableName, TableNumber, Report-
Name, NoOfReports, ReportId, ReportNumber and ReportComment。
因此可以这样修改:
let noOfReports = NoOfReports();
For i = 0 to noOfReports-1
Let repName = ReportName(i);
Let repID = ReportId(i);
reportInfo:
Load * INLINE [
reportID, reportName
$(repID),$(repName)];
Next
Case3:如果正常调用非Qv对象函数
如同dosomeTest()函数实例,在所有Qv版本中都可以调用。