Microsoft Visual Basic - Access 2016 - ошибка времени выполнения «9»: индекс ниже допустимого - PullRequest
0 голосов
/ 11 сентября 2018

Я новичок в 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

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

1 Ответ

0 голосов
/ 11 сентября 2018

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

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

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

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

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

...