VB RND 随机函数问题

text1.text中有10-20个不同的姓名 如“张三 李四 王五。。。。。”按下command后 在text2.text中 随机 显示六个不同的姓名 要怎么做
求代码 最好在语句后面加上解释 要求每按一次command就显示六个名字 每次显示的六个名字里不能有重复
hekcn的 Text1.Text = Text1.Text & x(100 * Rnd) 不行 有重复

Private Sub Form_Load()
Text1.Text = "秦桧 贾以道 小德张 李莲英 李林甫 杨国忠 魏忠贤 高俅 童贯 陈世美 潘仁美 丁春秋 西门庆 楚留香 苏蓉蓉 郭靖 黄蓉 快活王 项少龙 杨过 小龙女 尹志平 展昭 包拯 公孙策 张龙 赵虎 王朝 马汉 白玉堂 褒姒 妲己 杨玉环 貂蝉 王昭君 蔡文姬"
End Sub

Private Sub Command1_Click()
Dim tNameText As String '名字列表(文本形式)
Dim tNameList() As String '名字列表,字符串数组
Dim tNameCount As Long '名字的数量
Dim tNameLength As Long '名字列表的最大下标(tNameCount-1)
Dim tNameIndex As Long '当前索引
Dim tSwapIndex As Long '交换索引
Dim tTempValue As String
Dim tOutCount As Long '输出姓名数量
Dim tOutLength As Long '输出最大下标

tOutCount = 6
tOutLength = tOutCount - 1

'输入字符串分割数组

tNameText = Text1.Text
tNameList() = Split(tNameText, " ") '分割输入列表为字符串数组,间隔符为空格

'给原始姓名列表乱序

tNameCount = UBound(tNameList()) + 1 '取名字数量
tNameLength = tNameCount - 1

For tNameIndex = 0 To tNameLength '如果改成tOutLength则是快速算法
tSwapIndex = Int(Rnd * tNameCount) '取小于tNameCount的随机数(在0到tNameLength之间)
'交换tNameList(tNameIndex)和tNameList(tSwapIndex)的值
tTempValue = tNameList(tNameIndex)
tNameList(tNameIndex) = tNameList(tSwapIndex)
tNameList(tSwapIndex) = tTempValue
Next

'摘取指定数量的元素

ReDim Preserve tNameList(tOutLength) 'Preserve关键字表示改变数组长度的时候保留原有内容。本程序这句的作用是缩短数组。

'合并输出列表

tOutText = Join(tNameList(), " ") '合并字符串数组为字符串,间隔符为空格

'输出

Text2.Text = tOutText
End Sub
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-12-08
就这个思路吧,自己加入重复判断就可以了。

Option Explicit

Dim x(99) As String
Private Sub Form_Load()
x(0) = "张0"
x(1) = "李1"
x(2) = "王2"
'.........给其它变量赋值
x(99) = "胡99"
End Sub

Private Sub Command1_Click()
Dim i As Long
Text1.Text = ""
For i = 0 To 6
Text1.Text = Text1.Text & x(100 * Rnd)
Next
End Sub本回答被网友采纳
第2个回答  2010-12-08
把姓名保存到数组中,用随机函数进行取值,总共取六次即可,同时取值后要判断产生的随机数是否已经取过,避免重复。