Я новичок в VBA, поэтому у меня есть очень базовое представление о нем, и в настоящее время у меня проблема при запуске следующего кода:

Sub arrayData()
Dim custnames() As Variant
Dim num As Integer, dbs As Database, InsertRecord As String
Dim CustId As Integer, num1 As Integer
Dim CustName As String
Set dbs = CurrentDb()
CustId = 0
For num1 = 0 To 30000
CustId = CustId + 1
custnames = Array("Michael", "Larry", "Jeff", "Liam", "Gavin", "Ron", "Trevor", "Lester", "Leon", "Garry")



num = Int((30000 - 0 + 1) * Rnd + 0)
CustName = custnames(num)

InsertRecord = "insert into CUSTOMER (Cust_No, Cust_Name) values (" & "'" & CustId & "'" & "," & "'" & CustName & "'" & ")"

dbs.Execute InsertRecord
Debug.Print CustId; CustName

Next

End Sub

Когда я нажимаю кнопку «Выполнить», появляется сообщение об ошибке: «Ошибка выполнения '9': индекс вне допустимого диапазона, и отладка выделяется CustName = custnames(num). Цель этого кода - заполнить таблицу 30 000 записей.

1
user10169361 11 Сен 2018 в 05:37

1 ответ

Лучший ответ

Вы создаете индекс от 1 до 30000, но в массиве всего 10 элементов. Вы хотите сгенерировать случайное целое число в диапазоне, что обычно делается следующим образом:

num = Int((UBound(custnames) - LBound(custnames) + 1) * Rnd + LBound(custnames))

Поскольку вы знаете, что нижняя граница равна 0:

num = Int((UBound(custnames) + 1) * Rnd)

Как отметил @Comintern, вы также должны переместить создание массива за пределы цикла.

0
Mitch Wheat 11 Сен 2018 в 02:46