51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 4017|回复: 14
打印 上一主题 下一主题

[原创] 调用子程序,总是提示类型不匹配

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2007-9-12 12:40:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我定义了一个vbs,里面有个子程序
sub SaveDatatable(sfilePath, irow)
...
end sub

在action中调用时,却总是提示“类型不匹配”
调用方式:
SaveDatatable sfilePath, irow
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2007-9-12 13:50:34 | 只看该作者
调用sub的那行语句就是SaveDatatable sfilePath, irow么?建议楼主将错误的信息截图贴上来吧
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2018-4-22 12:50
  • 签到天数: 393 天

    连续签到: 1 天

    [LV.9]测试副司令

    3#
    发表于 2007-9-12 14:27:21 | 只看该作者
    那就试一下用 call SaveDatatable(sfilePath, irow)
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    4#
     楼主| 发表于 2007-9-12 14:59:29 | 只看该作者
    问题见图片
    断点处就是调用过程,下面的调试显示有两个参数的数据

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5#
     楼主| 发表于 2007-9-12 15:01:12 | 只看该作者
    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
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2022-7-13 15:22
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    6#
    发表于 2007-9-12 15:24:42 | 只看该作者
    调试:
    1. call SaveDatatable("c:\1.txt",5)
    用常数作为参数试试看

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

    3. 打印 Parameter("") 这些值,看看他们的内容是不是有问题
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    7#
    发表于 2007-9-12 15:41:16 | 只看该作者
    可能是变量类型的问题把,强制转换一下试试~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-4-22 12:50
  • 签到天数: 393 天

    连续签到: 1 天

    [LV.9]测试副司令

    8#
    发表于 2007-9-12 15:52:33 | 只看该作者
    在我的电脑里运行了,没错...

    是不是你的其它地方出错了..????
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-4-22 12:50
  • 签到天数: 393 天

    连续签到: 1 天

    [LV.9]测试副司令

    9#
    发表于 2007-9-12 15:54:11 | 只看该作者
    '调用
    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的文件.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    10#
    发表于 2007-9-12 15:55:28 | 只看该作者
    估计十有八九:testsettings>resources>libraries中没有加载你的vbs
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    11#
     楼主| 发表于 2007-9-12 16:09:48 | 只看该作者
    SaveDatatable "e:\output.xls", 1
    call SaveDatatable("e:\output.xls", 1)
    都试了,不行啊,不知道 lengz 说的类型强制转换,如何转换?
    我用的是qtp9.2
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    12#
    发表于 2007-9-12 16:11:40 | 只看该作者
    楼主请注意,调用带参数的Sub(最好是调用所有的Sub)都使用Call,否则很容易就会出问题的。
    记得songfun老大以前的帖子中也强调过这个问题
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-4-22 12:50
  • 签到天数: 393 天

    连续签到: 1 天

    [LV.9]测试副司令

    13#
    发表于 2007-9-12 16:32:54 | 只看该作者
    Set ExcelObj = CreateObject("Excel.Application")
    可能是这句出问题了...

    看看你的QTP加载了active X了没有
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    14#
     楼主| 发表于 2007-9-13 12:01:42 | 只看该作者
    多谢 hsjzfling 的提醒。
    我用call SaveDatatable("e:\output.xls", "1") 可以了。的确是强制转换!!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2022-7-13 15:22
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    15#
    发表于 2007-9-13 14:14:55 | 只看该作者
    主要原因可能还是因为你的第2个参数 “1” 现在用了字符串了
    所以通过了

    你可以不用call再试试看
    SaveDatatable "e:\output.xls", "1"
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-5-27 03:56 , Processed in 0.084662 second(s), 28 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表