Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 在文本字段中生成随机字符串_Vba_Ms Access - Fatal编程技术网

Vba 在文本字段中生成随机字符串

Vba 在文本字段中生成随机字符串,vba,ms-access,Vba,Ms Access,我们公司有一个使用Microsoft Access运行的旧软件(多年前由首批员工之一制作)。老板让我在点击时在特定的文本框中添加随机字符串生成,但我不知道怎么做。我没有任何Microsoft Access编程经验,所以我想请你帮忙 到目前为止,我设法创建了按钮和文本字段。这就是它停止的地方。我还设法访问了按钮操作的代码: Private Sub command133_Click() End Sub 尝试此功能: Public Function GetRandomString(ByVal iL

我们公司有一个使用Microsoft Access运行的旧软件(多年前由首批员工之一制作)。老板让我在点击时在特定的文本框中添加随机字符串生成,但我不知道怎么做。我没有任何Microsoft Access编程经验,所以我想请你帮忙

到目前为止,我设法创建了按钮和文本字段。这就是它停止的地方。我还设法访问了按钮操作的代码:

Private Sub command133_Click()

End Sub
尝试此功能:

Public Function GetRandomString(ByVal iLength As Integer) As String
    Dim sResult As String = ""
    Dim rdm As New Random()

    For i As Integer = 1 To iLength
        sResult &= ChrW(rdm.Next(32, 126))
    Next

    Return sResult
End Function

这是一种方法,将在Access VBA(比vb.net旧的basic)中工作。它将生成一个包含字母和数字的字符串

Sub test()

    Dim s As String * 8 'fixed length string with 8 characters
    Dim n As Integer
    Dim ch As Integer 'the character
    For n = 1 To Len(s) 'don't hardcode the length twice
        Do
            ch = Rnd() * 127 'This could be more efficient.
            '48 is '0', 57 is '9', 65 is 'A', 90 is 'Z', 97 is 'a', 122 is 'z'.
        Loop While ch < 48 Or ch > 57 And ch < 65 Or ch > 90 And ch < 97 Or ch > 122
        Mid(s, n, 1) = Chr(ch) 'bit more efficient than concatenation
    Next

    Debug.Print s

End Sub
子测试()
Dim s作为字符串*8'固定长度字符串,包含8个字符
作为整数的Dim n
Dim ch作为“整数”字符
对于n=1到Len(s),不要将长度硬编码两次
做
ch=Rnd()*127'这可能更有效。
'48是'0',57是'9',65是'A',90是'Z',97是'A',122是'Z'。
当ch<48或ch>57和ch<65或ch>90和ch<97或ch>122时循环
Mid(s,n,1)=Chr(ch)'比级联更有效
下一个
调试。打印s
端接头

在@Bathsheba代码上工作,我做到了。它将生成一个随机字符串,其中包含您想要的字符数

代码:

Public Function GenerateUniqueSequence(numberOfCharacters As Integer) As String

    Dim random As String  ' * 8 'fixed length string with 8 characters
    Dim j As Integer
    Dim ch As Integer   ' each character

    random = ""

    For j = 1 To numberOfCharacters
        random = random & GenerateRandomAlphaNumericCharacter
    Next

    GenerateUniqueSequence = random

End Function

Public Function GenerateRandomAlphaNumericCharacter() As String

    'Numbers : 48 is '0', 57  is '9'
    'LETTERS : 65 is 'A', 90  is 'Z'
    'letters : 97 is 'a', 122 is 'z'

    GenerateRandomAlphaNumericCharacter = ""

    Dim i As Integer

    Randomize
    i = (Rnd() * 2) + 1 'One chance out of 3 to choose one of 3 catégories

    Randomize
    Select Case i
        Case 1 'Numbers
            GenerateRandomAlphaNumericCharacter = Chr(Rnd() * 9 + 48)
        Case 2 'LETTERS
            GenerateRandomAlphaNumericCharacter = Chr(Rnd() * 25 + 65)
        Case 3 'letters
            GenerateRandomAlphaNumericCharacter = Chr(Rnd() * 25 + 97)
    End Select

End Function
我将其与随机数的字符一起使用,如下所示:

'Generates random Session ID between 15 and 30 alphanumeric characters
SessionID = GenerateUniqueSequence(Rnd * 15 + 15)
结果:

s8a8qWOmoDvC4jKRjPr5hOY12u 26
TB24qZ4cNfr6EdyY0J 18
6LZRQ9P5WHLNd71LIdqJ 20
KPN0RmlhhJKnVzPTkW 18
R2pNOKWJMKl9KpSoIV2egUNTEb1QC2 30
X8jHuupP6SvEI8Dt2wJi 20

注意:这仍然不是完全随机的。它将提供比正常更高的数字计数,因为生成的所有字符中约有1/3是数字

正态分布如下所示: 10个数字加26个小写加26个大写=62个可能的字符。 数字通常为字符串的10/62部分或1/6.2
使用代码 i=(Rnd()*2)+1'三分之一的机会从三个类别中选择一个 数字的计数被推高到1/3(平均值)


也许不太令人担心——除非你试图击败国家安全局,然后你的射程明显缩小

Q关于Access VBA,但不是VB.NETYes,但在提交此答案后编辑了标记。它将在vb.net中工作,所以+1。@Bathsheba字母和数字,比如8个字符长。您想要小写和大写字母吗?我给出的答案只适用于大写字母。@Bathsheba是的,也适用于小写字母+数字,如果不是太多的工作:)我已经修改:生成字母和数字now@Bathsheba谢谢:)将尝试了解它的工作原理并学习新的东西,而不仅仅是复制它。+1,作为替代,我将使用额外的rand值来确定generate
ch
的范围。想法来自这里:嗨,芭丝谢芭,只是一个反馈。我在Excel中测试代码的随机字符串长度为13个字符。在一百万行中,excel创建13826个重复字符串,只剩下986174个唯一字符串。在大多数情况下,它可能足够独特,但我认为Rnd()函数中存在缺陷。理论上,在62个字符和数字(0-9 a-z a-z)中随机选择13个字符和数字,应该有83亿个以上的唯一选择。因此,100万条记录中的14k条重复记录非常重要。有吗?谢谢你的代码。唯一随机是一个完全不同的要求。您是对的,
Rnd()
的周期非常小。也许您应该在调用
Rnd()之前添加
Randomize