VBA получить случайную строку из массива - PullRequest
0 голосов
/ 29 июня 2018

Я пытаюсь вернуть строку из массива, которая будет помещена в метку в пользовательской форме. Я видел много вещей для этого, но ни одна из них, похоже, не работает. У меня есть массив с именем Compliments, который я хочу вытащить одну из строк для этого массива и передать ее моему label6, но поскольку это пользовательская форма, которая отображается только при открытии листа и открывается на мгновение, я хочу иметь возможность сделать это случайным Каждый раз, когда кто-то открывает лист, он получает различный комплимент, чтобы помочь начать свой день. Мой код для всего ниже:

Private Sub UserForm_Activate()
    TextBox1.Value = Date
    TextBox2.Value = Time
    TextBox3.Value = MainMenu.TextBox1.Value
    Label6.Caption = "RANDOM ARRAY GOES HERE"

    Application.Wait (Now + TimeValue("00:00:05"))

    Welcome.Hide
End Sub

Private Sub UserForm_Initialize()
    Me.StartUpPosition = 0
    Me.Top = (Application.Height / 2) - Me.Height / 2
    Me.Left = (Application.Width / 2) - Me.Width / 2

    Compliments = Array("Good Morning, You are Beautiful Today", _
        "I think you're pretty awesome", "That outfit looks great on you", _
        "You're a great engineer", "You rock Dude", "Nobody can get you down", _
        "Your makeup is spot on")
End Sub

1 Ответ

0 голосов
/ 29 июня 2018

Вы можете использовать функцию Rnd () в VBA для генерации случайного числа. С некоторой математикой вы можете заставить это быть между двумя целыми числами. В этом случае он будет между 0 и верхней границей вашего массива Compliments. Должно работать что-то вроде следующего:

Function Compliments()
    'Function to return the array
    Compliments = Array("Good Morning, You are Beautiful Today", _
            "I think you're pretty awesome", "That outfit looks great on you", _
            "You're a great engineer", "You rock Dude", "Nobody can get you down", _
            "Your makeup is spot on")
End Function

Private Sub UserForm_Activate()
    TextBox1.Value = Date
    TextBox2.Value = Time
    TextBox3.Value = MainMenu.TextBox1.Value

    randArrIndex = Int ((Ubound(Compliments) +  1) * Rnd )
    Label6.Caption = Compliments(randArrIndex)

    Application.Wait (Now + TimeValue("00:00:05"))

    Welcome.Hide
End Sub

Private Sub UserForm_Initialize()
    Me.StartUpPosition = 0
    Me.Top = (Application.Height / 2) - Me.Height / 2
    Me.Left = (Application.Width / 2) - Me.Width / 2        
End Sub
...