51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 5289|回复: 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空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

27#
发表于 2010-3-18 11:19:22 | 只看该作者
excelhome里 有很多这样都问题
回复 支持 反对

使用道具 举报

该用户从未签到

26#
发表于 2010-3-12 15:06:52 | 只看该作者
原帖由 wujianping 于 2010-3-11 22:59 发表


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


外面传进来什么,就给这个随机函数什么就好了。。。你觉得只能固定吗?
回复 支持 反对

使用道具 举报

该用户从未签到

25#
发表于 2010-3-12 11:54:39 | 只看该作者
截取一段提供参考。
Randomize   语句   
               
   
  初始化随机数生成器。   
   
  语法   
   
  Randomize   [number]   
   
  可选的   number   参数是   Variant   或任何有效的数值表达式。   
   
  说明   
   
  Randomize   用   number   将   Rnd   函数的随机数生成器初始化,该随机数生成器给   number   一个新的种子值。如果省略   number,则用系统计时器返回的值作为新的种子值。   
   
  如果没有使用   Randomize,则(无参数的)Rnd   函数使用第一次调用   Rnd   函数的种子值。   
   
  注意   若想得到重复的随机数序列,在使用具有数值参数的   Randomize   之前直接调用具有负参数值的   Rnd。使用具有同样   number   值的   Randomize   是不会得到重复的随机数序列的。
回复 支持 反对

使用道具 举报

该用户从未签到

24#
发表于 2010-3-12 11:51:31 | 只看该作者
随机前用 Randomize 处理下,这样每次第一次执行随机函数就不会出现每次第一次执行都得到同样的值了。
回复 支持 反对

使用道具 举报

该用户从未签到

23#
发表于 2010-3-12 11:48:23 | 只看该作者
没细看,不过应该是属于伪随机问题。
回复 支持 反对

使用道具 举报

该用户从未签到

22#
 楼主| 发表于 2010-3-12 10:21:29 | 只看该作者
不过还是有个问题,这样好像也只是治标而已,如果我想要更多的随机值也还要到函数里面改啊?如果要的随机值的数量很大呢?还是存在问题的,看看能不能帮我再优化一下,我这边也多想想
回复 支持 反对

使用道具 举报

该用户从未签到

21#
 楼主| 发表于 2010-3-12 10:19:00 | 只看该作者
原帖由 feiyunkai 于 2010-3-12 09:57 发表

那就取20个随即数好了,方法有了,自己改下代码就可以了啊,其实在第2次代码的基础上,你完全可以修改下,实现自己想要的结果,为什么不自己动手改下呢?懒!!!!!哈哈
'函数RandomChar(a1,a2)中的
Dim Chara ...


哈哈,太谢谢了,我是想看看你这边还有没有更好的方法来实现我想要的东西,所以我就先不改!
回复 支持 反对

使用道具 举报

  • 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 编辑 ]
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    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个值,干,郁闷了。。。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    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 =”我并不是只要随机值而已,我可能要给他常量,或其他的变量,要写死在里面我就不用费这么大劲了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

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

    使用道具 举报

  • 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 编辑 ]
    回复 支持 反对

    使用道具 举报

    该用户从未签到

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


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

    使用道具 举报

    该用户从未签到

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


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

    使用道具 举报

  • 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 编辑 ]
    回复 支持 反对

    使用道具 举报

    该用户从未签到

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

    使用道具 举报

    该用户从未签到

    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赋各种各样的值,随机字符串只是其中一种,非常感谢
    回复 支持 反对

    使用道具 举报

    该用户从未签到

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


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

    使用道具 举报

  • 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 编辑 ]
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-11-27 01:40 , Processed in 0.105803 second(s), 28 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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