有时候在中间是ZERO时会出现此错误:
无效的程序调用或参数:' Mid'
我该如何解决这个问题?
Function CreateRandomString(iSize)
Const VALID_TEXT = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
Dim sNewSearchTag
Dim I
For I = 0 To iSize
Randomize
sNewSearchTag = sNewSearchTag & Mid(VALID_TEXT,Round(Rnd * Len(VALID_TEXT)),1)
Next
CreateRandomString = sNewSearchTag
End Function
答案 0 :(得分:3)
要使随机范围正确,您需要确保生成的随机值介于1和VALID_TEXT
字符串值的长度之间。
使用Rnd()
执行此操作的简单公式是
(Rnd() * Len(VALID_TEXT)) + 1
也会将Randomize()
移到循环之外,因为当你在循环的每次迭代中重置种子时,你只会减少随机性。
错误的原因是Mid()
需要一个有效的开始和大小,零值不是。有关详细信息,请参阅this question。
有关随机数范围的更多信息,请参见另一个问题的this answer。
答案 1 :(得分:0)
Mid的第二个参数是1。这意味着,如果你这样做了:
Mid(VALID_TEXT,1,1)
你会得到“a”,而不是你想象中的“b”。
一个简单的解决方法是在第二个参数中添加1,但是你会在顶端遇到同样的问题。通常,人们会在将其乘以而不是使用Math.Round后将随机数向下舍入,或者查看Math.Floor或整数截断。