51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 5286|回复: 26
打印 上一主题 下一主题

[原创] 被个问题困住了,好心人帮我一下哈

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2010-3-11 10:23:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
'============================================
'从上到下填入10个值,再从左2到右填入10个值
Sub ReportInformation(filename,mychar)
Set Excel = CreateObject("Excel.Application")
Excel.Workbooks.Add
Set NewSheet = Excel.Sheets.Item(1)
NewSheet.Name = "Test"
For i = 1 to 10
NewSheet.Cells(i,1).value = mychar
i = i + 1
NewSheet.Cells(1,i).value = mychar
i = i - 1
Next
Excel.ActiveWorkbook.SaveAs filename
Excel.Quit
Set Excel = Nothing
End Sub

'=================================================================================
'获得10个随机字符串

Function RandomChar(a1,a2)
For i = 1 to 3
Num1 = RandomNumber(a1, a2)
Num2 = RandomNumber(a1, a2)
Num3 = RandomNumber(a1, a2)
Num4 = RandomNumber(a1, a2)
Num5 = RandomNumber(a1, a2)
Num6 = RandomNumber(a1, a2)
Num7 = RandomNumber(a1, a2)
Num8 = RandomNumber(a1, a2)
Num9 = RandomNumber(a1, a2)
Num10 = RandomNumber(a1, a2)
RandomChar = chr(Num1)&chr(Num2)&chr(Num3)&chr(Num4)&chr(Num5)&chr(Num6)&chr(Num7)&chr(Num8)&chr(Num9)&chr(Num10)
Next
End Function


我要把随机字符串依次填入Excel中,并实现每一个单元格都是不同的字符串。现在遇到一个问题,怎么让每个单元格都是不同的值,执行一次"ReportInformation"只能调用一次"RandomChar"导致每个单元格都是一样的值,怎么重复调用"RandomChar"?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2010-3-11 10:39:19 | 只看该作者
在填值的循环中调用随机数?
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2010-3-11 11:01:24 | 只看该作者
原帖由 shirlincn 于 2010-3-11 10:39 发表
在填值的循环中调用随机数?


对的
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2016-8-25 11:11
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    4#
    发表于 2010-3-11 11:17:50 | 只看该作者
    这个去查查彩票随机 如双色球。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5#
    发表于 2010-3-11 11:41:12 | 只看该作者
    列也是可以 +1 的,把A转ascii,+1以后再转字符就是B了
    然后用Range单元格做,套2个for,XY坐标放进去就行了,这样比较清晰
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    6#
     楼主| 发表于 2010-3-11 12:01:29 | 只看该作者
    原帖由 skyzhu 于 2010-3-11 11:41 发表
    列也是可以 +1 的,把A转ascii,+1以后再转字符就是B了
    然后用Range单元格做,套2个for,XY坐标放进去就行了,这样比较清晰


    这个我知道,我是要让a1,a2形成一个随机区间,比如65-90就是A-Z

    怎么才能做到每循环一次“NewSheet.Cells(i,1).value = mychar”,就获得一次随机值呢?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    7#
    发表于 2010-3-11 13:27:30 | 只看该作者
    不明白lz那个随机数里的i有什么作用么?RandomChar的值的不同ms就只跟a1和a2有关系
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2014-12-18 10:31
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    8#
    发表于 2010-3-11 13:30:00 | 只看该作者

    修改代码如下:然后再试下

    ''============================================
    ''从上到下填入10个值,再从左2到右填入10个值
    Call ReportInformation("D:\test.xls")
    Sub ReportInformation(filename)
    Set Excel = CreateObject("Excel.Application")
    Excel.DisplayAlerts = False
    Excel.Workbooks.Add
    Set NewSheet = Excel.Sheets.Item(1)
    NewSheet.Name = "Test"
    For i = 1 to 10
    mychar=RandomChar(65,90)
    NewSheet.Cells(i,1).value = mychar
    i = i + 1
    NewSheet.Cells(1,i).value = mychar
    i = i - 1
    Next
    Excel.ActiveWorkbook.SaveAs filename
    Excel.Workbooks.Close
    Excel.Quit
    Set NewSheet=Nothing
    Set Excel = Nothing
    End Sub
    '
    ''=================================================================================
    ''获得10个随机字符串
    '
    Function RandomChar(a1,a2)
    Num1 = RandomNumber(a1, a2)
    Num2 = RandomNumber(a1, a2)
    Num3 = RandomNumber(a1, a2)
    Num4 = RandomNumber(a1, a2)
    Num5 = RandomNumber(a1, a2)
    Num6 = RandomNumber(a1, a2)
    Num7 = RandomNumber(a1, a2)
    Num8 = RandomNumber(a1, a2)
    Num9 = RandomNumber(a1, a2)
    Num10 = RandomNumber(a1, a2)
    RandomChar = chr(Num1)&chr(Num2)&chr(Num3)&chr(Num4)&chr(Num5)&chr(Num6)&chr(Num7)&chr(Num8)&chr(Num9)&chr(Num10)
    End Function

    [ 本帖最后由 feiyunkai 于 2010-3-11 13:44 编辑 ]
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2014-12-18 10:31
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    9#
    发表于 2010-3-11 13:36:08 | 只看该作者
    因为你将RandomChar(a1,a2)作为函数ReportInformation的参数,所以函数体内,所有的RandomChar(a1,a2)的值,都是传入时的值,所以值是固定的,如果想改变这个值,那么就要将RandomChar(a1,a2)放在循环体里边。
    解决这个问题的方法有2种:
    一、将RandomChar(a1,a2)放在ReportInformation函数的循环体内(见上面的代码)
    二、将ReportInformation函数中的循环放在函数的外面(这种方法性能很差,所以最好采用第一种方法)

    另外使用Excel.ActiveWorkbook.SaveAs方法时,前面最好设置一下强制保存:Excel.DisplayAlerts = False,filename路径下有同名文件时,就会直接覆盖该文件,而不提示是否覆盖,如果有特殊需要的,那么写个函数判断一下filename路径下是否存在相同文件

    [ 本帖最后由 feiyunkai 于 2010-3-11 14:00 编辑 ]
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    10#
     楼主| 发表于 2010-3-11 14:00:55 | 只看该作者
    原帖由 May_may 于 2010-3-11 13:27 发表
    不明白lz那个随机数里的i有什么作用么?RandomChar的值的不同ms就只跟a1和a2有关系


    i是增加excel表的行列值
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    11#
     楼主| 发表于 2010-3-11 14:19:03 | 只看该作者
    原帖由 feiyunkai 于 2010-3-11 13:36 发表
    因为你将RandomChar(a1,a2)作为函数ReportInformation的参数,所以函数体内,所有的RandomChar(a1,a2)的值,都是传入时的值,所以值是固定的,如果想改变这个值,那么就要将RandomChar(a1,a2)放在循环体里边。
    解决 ...


    修改后的代码跟我想要的还是有点出入,我并不想要把mychar在函数体内写死,我希望能给mychar赋各种各样的值,随机字符串只是其中一种,非常感谢
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    12#
    发表于 2010-3-11 15:23:34 | 只看该作者
    mychar=RandomChar(65,90)
    这个要随机区间的话。。把65和90 换成随机范围的不就好了。。。
    或者你再加个参数,也随机一下,就当是个随机的类型。。。
    有随机了还要随机区间干什么
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2014-12-18 10:31
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    13#
    发表于 2010-3-11 16:49:43 | 只看该作者
    我上面已经说过,你的函数RandomChar(a1,a2)返回值只是个固定的值,一个固定的值,作为参数仍是个固定的值,因此要想在每次使用时,都取不同的值,那么函数必须返回不止一个的值,下面以返回数组为例:
    '思路:随即获取10组数据,并存放在数组中,然后将数组作为参数传递给函数,这样在函数体内就可以根据数组的下标,去取相应的数据

    ''============================================
    ''从上到下填入10个值,再从左2到右填入10个值
    Call ReportInformation("D:\test.xls",RandomChar(65,90))
    Sub ReportInformation(filename,mychar)
    Set Excel = CreateObject("Excel.Application")
    Excel.DisplayAlerts = False
    Excel.Workbooks.Add
    Set NewSheet = Excel.Sheets.Item(1)
    NewSheet.Name = "Test"
    For i = 1 to 10
    NewSheet.Cells(i,1).value = mychar(i-1)
    i = i + 1
    NewSheet.Cells(1,i).value = mychar(i-1)
    i = i - 1
    Next
    Excel.ActiveWorkbook.SaveAs filename
    Excel.Workbooks.Close
    Excel.Quit
    Set NewSheet=Nothing
    Set Excel = Nothing
    End Sub

    Function RandomChar(a1,a2)
    Dim Charaa(10)
    For j=0 to 9
    Num1 = RandomNumber(a1, a2)
    Num2 = RandomNumber(a1, a2)
    Num3 = RandomNumber(a1, a2)
    Num4 = RandomNumber(a1, a2)
    Num5 = RandomNumber(a1, a2)
    Num6 = RandomNumber(a1, a2)
    Num7 = RandomNumber(a1, a2)
    Num8 = RandomNumber(a1, a2)
    Num9 = RandomNumber(a1, a2)
    Num10 = RandomNumber(a1, a2)
    Charaa(j) = (chr(Num1)&chr(Num2)&chr(Num3)&chr(Num4)&chr(Num5)&chr(Num6)&chr(Num7)&chr(Num8)&chr(Num9)&chr(Num10))
    RandomChar=Charaa
    Next
    End Function

    [ 本帖最后由 feiyunkai 于 2010-3-11 17:11 编辑 ]
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    14#
     楼主| 发表于 2010-3-11 17:39:47 | 只看该作者
    原帖由 feiyunkai 于 2010-3-11 16:49 发表
    我上面已经说过,你的函数RandomChar(a1,a2)返回值只是个固定的值,一个固定的值,作为参数仍是个固定的值,因此要想在每次使用时,都取不同的值,那么函数必须返回不止一个的值,下面以返回数组为例:
    '思路:随即 ...


    横排的都是一样的值,还是没有解决啊老大
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    15#
     楼主| 发表于 2010-3-11 17:40:34 | 只看该作者
    原帖由 skyzhu 于 2010-3-11 15:23 发表
    mychar=RandomChar(65,90)
    这个要随机区间的话。。把65和90 换成随机范围的不就好了。。。
    或者你再加个参数,也随机一下,就当是个随机的类型。。。
    有随机了还要随机区间干什么


    你没理解我的想法
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2014-12-18 10:31
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    16#
    发表于 2010-3-11 17:48:35 | 只看该作者
    呵呵,那是我调试时候用的代码,,忘记改了,你把(i-1)换成0-9的随即数就行了
    For i = 1 to 10
    NewSheet.Cells(i,1).value = mychar(i-1)
    i = i + 1
    NewSheet.Cells(1,i).value = mychar(i-1)
    i = i - 1
    Next
    修改为:
    For i = 1 to 10
    NewSheet.Cells(i,1).value = mychar(RandomNumber(0,9))
    i = i + 1
    NewSheet.Cells(1,i).value = mychar(RandomNumber(0,9))
    i = i - 1
    Next

    [ 本帖最后由 feiyunkai 于 2010-3-11 17:52 编辑 ]
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    17#
    发表于 2010-3-11 21:05:28 | 只看该作者
    汗,LZ绕了好大个圈子
    NewSheet.Cells(1,i).value =RandomChar(xxxxx)  赋值的时候调用你的随机函数不就好了
    随机函数里要加Randomize,否则容易出一样的
    那个随机函数搞的好复杂,1个变量就可以了,每生成一个字符拼接在1个变量里面就好了
    还以为你要填满10*10的格子,原来就只要1行1列
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    18#
     楼主| 发表于 2010-3-11 22:59:19 | 只看该作者
    原帖由 skyzhu 于 2010-3-11 21:05 发表
    汗,LZ绕了好大个圈子
    NewSheet.Cells(1,i).value =RandomChar(xxxxx)  赋值的时候调用你的随机函数不就好了
    随机函数里要加Randomize,否则容易出一样的
    那个随机函数搞的好复杂,1个变量就可以了,每生成一个字 ...


    “NewSheet.Cells(1,i).value =”我并不是只要随机值而已,我可能要给他常量,或其他的变量,要写死在里面我就不用费这么大劲了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    19#
     楼主| 发表于 2010-3-11 23:10:08 | 只看该作者
    原帖由 feiyunkai 于 2010-3-11 17:48 发表
    呵呵,那是我调试时候用的代码,,忘记改了,你把(i-1)换成0-9的随即数就行了
    For i = 1 to 10
    NewSheet.Cells(i,1).value = mychar(i-1)
    i = i + 1
    NewSheet.Cells(1,i).value = mychar(i-1)
    i = i - 1
    Nex ...


    这样行列都是取相同数组里的10个值,行列的字符串应该都是一样的,只是顺序不同而已,还是没解决啊老大
    我想说是不是要定义两个数组,或者数组要定义20个值,干,郁闷了。。。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2014-12-18 10:31
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    20#
    发表于 2010-3-12 09:57:53 | 只看该作者
    原帖由 wujianping 于 2010-3-11 23:10 发表


    这样行列都是取相同数组里的10个值,行列的字符串应该都是一样的,只是顺序不同而已,还是没解决啊老大
    我想说是不是要定义两个数组,或者数组要定义20个值,干,郁闷了。。。

    那就取20个随即数好了,方法有了,自己改下代码就可以了啊,其实在第2次代码的基础上,你完全可以修改下,实现自己想要的结果,为什么不自己动手改下呢?懒!!!!!哈哈
    '函数RandomChar(a1,a2)中的
    Dim Charaa(10)
    For j=0 to 9
    '修改为:
    Dim Charaa(20)
    For j=0 to 19
    '函数ReportInformation(filename,mychar)中的
    For i = 1 to 10
    NewSheet.Cells(i,1).value = mychar(i-1)
    i = i + 1
    NewSheet.Cells(1,i).value = mychar(i-1)
    i = i - 1
    Next
    '修改为:
    For i = 1 to 10
    NewSheet.Cells(i,1).value = mychar(i-1)
    i = i + 1
    NewSheet.Cells(1,i).value = mychar(i+9)
    i = i - 1
    Next

    [ 本帖最后由 feiyunkai 于 2010-3-12 10:06 编辑 ]
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-11-26 23:40 , Processed in 0.076632 second(s), 25 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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