51Testing软件测试论坛

标题: 调用子程序,总是提示类型不匹配 [打印本页]

作者: yueyang    时间: 2007-9-12 12:40
标题: 调用子程序,总是提示类型不匹配
我定义了一个vbs,里面有个子程序
sub SaveDatatable(sfilePath, irow)
...
end sub

在action中调用时,却总是提示“类型不匹配”
调用方式:
SaveDatatable sfilePath, irow
作者: hsjzfling    时间: 2007-9-12 13:50
调用sub的那行语句就是SaveDatatable sfilePath, irow么?建议楼主将错误的信息截图贴上来吧
作者: sterson    时间: 2007-9-12 14:27
那就试一下用 call SaveDatatable(sfilePath, irow)
作者: yueyang    时间: 2007-9-12 14:59
问题见图片
断点处就是调用过程,下面的调试显示有两个参数的数据
作者: yueyang    时间: 2007-9-12 15:01
savedatatable 定义如下:
sub SaveDatatable(sfilePath,irow)
        Dim i, j
        Dim ExcelObj, ExlSheet   
        i=datatable.GetSheet(1).GetParameterCount         '取列数
       
        Set ExcelObj = CreateObject("Excel.Application")
        'ExcelObj.Workbooks.Open sfilePath
        ExcelObj.Visible = False
        ExcelObj.Workbooks.Open sfilePath ,ForWriting, False
        Set ExlSheet = ExcelObj.Workbooks(1).Worksheets(1)

        For j=1 to i
                ExlSheet.Cells(irow,j) = datatable.Value(j, 1)  
        next
        ExcelObj.ActiveWorkbook.Save
        ExcelObj.Application.Quit
        Set ExcelObj = Nothing       
        set ExlSheet = Nothing

End Sub
作者: rivermen    时间: 2007-9-12 15:24
调试:
1. call SaveDatatable("c:\1.txt",5)
用常数作为参数试试看

2. 把 SaveDatatable 中的代码全部注视掉
留一个 msgbox “调用中。。。”

3. 打印 Parameter("") 这些值,看看他们的内容是不是有问题
作者: lengz    时间: 2007-9-12 15:41
可能是变量类型的问题把,强制转换一下试试~
作者: sterson    时间: 2007-9-12 15:52
在我的电脑里运行了,没错...

是不是你的其它地方出错了..????
作者: sterson    时间: 2007-9-12 15:54
'调用
Call SaveDatatable("c:\a.xls",3)


'实现
  Sub SaveDatatable(sfilePath,irow)
        Dim i, j
        Dim ExcelObj, ExlSheet   
        i=datatable.GetSheet(1).GetParameterCount         '取列数
        
        Set ExcelObj = CreateObject("Excel.Application")
        ExcelObj.Visible = False
        ExcelObj.Workbooks.Open sfilePath ,ForWriting, False
        Set ExlSheet = ExcelObj.Workbooks(1).Worksheets(1)

        For j=1 to i
                ExlSheet.Cells(irow,j) = datatable.Value(j, 1)  
        next
        ExcelObj.ActiveWorkbook.Save
        ExcelObj.Application.Quit
        Set ExcelObj = Nothing        
        set ExlSheet = Nothing

End Sub

当然,前提是要在C盘先创建一个a.xls的文件.
作者: sstars    时间: 2007-9-12 15:55
估计十有八九:testsettings>resources>libraries中没有加载你的vbs
作者: yueyang    时间: 2007-9-12 16:09
SaveDatatable "e:\output.xls", 1
call SaveDatatable("e:\output.xls", 1)
都试了,不行啊,不知道 lengz 说的类型强制转换,如何转换?
我用的是qtp9.2
作者: hsjzfling    时间: 2007-9-12 16:11
楼主请注意,调用带参数的Sub(最好是调用所有的Sub)都使用Call,否则很容易就会出问题的。
记得songfun老大以前的帖子中也强调过这个问题
作者: sterson    时间: 2007-9-12 16:32
Set ExcelObj = CreateObject("Excel.Application")
可能是这句出问题了...

看看你的QTP加载了active X了没有
作者: yueyang    时间: 2007-9-13 12:01
多谢 hsjzfling 的提醒。
我用call SaveDatatable("e:\output.xls", "1") 可以了。的确是强制转换!!
作者: rivermen    时间: 2007-9-13 14:14
主要原因可能还是因为你的第2个参数 “1” 现在用了字符串了
所以通过了

你可以不用call再试试看
SaveDatatable "e:\output.xls", "1"




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2