Продолжайте получать эту ошибку иногда, когда середина равна нулю:

Недопустимый вызов процедуры или аргумент: '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
1
compcobalt 25 Апр 2017 в 01:21

2 ответа

Лучший ответ

Чтобы случайный диапазон был правильным, вам нужно убедиться, что сгенерированное случайное значение находится между 1 и длиной строкового значения VALID_TEXT.

Простая формула для этого с помощью Rnd()

(Rnd() * Len(VALID_TEXT)) + 1

Также переместите Randomize() вне цикла, так как вы просто сделаете его менее случайным, так как вы сбрасываете начальное число с каждой итерацией цикла.

Причина ошибки: Mid() ожидает допустимого начала и размера, а не нулевое значение. См. этот вопрос для получения дополнительной информации.

Дополнительную информацию о диапазонах случайных чисел можно найти в этом ответе на другой вопрос.

3
Community 23 Май 2017 в 11:54

Второй аргумент Mid равен 1 исходя из. Это означает, что если вы сделали:

Mid(VALID_TEXT,1,1)

Вы получите «а», а не «б», как вы могли ожидать.

Легким решением было бы добавить 1 ко второму аргументу, но затем вы столкнетесь с той же проблемой в верхнем конце. Обычно люди округляют случайное число вниз после умножения его вместо использования Math.Round, либо просмотра Math.Floor, либо усечения Integer.

0
Lankymart 24 Апр 2017 в 22:52