2015-08-12 3 views
2

Я создаю инструмент, который заполняет список частей, подлежащих проверке из списка деталей на 2-м листе (PARTS). Части находятся в классах (A, B или C), поэтому инструмент использует генератор случайных чисел, чтобы выбрать, какую строку проверять класс детали. Я получаю 1004 runtime error, когда я пытаюсь проверить класс партии и буду признателен за получение помощи вокруг этого. Вот цикл, который дает мне ошибку:Заполнение ячеек из другого листа в VBA

'While loop to obtain 6 A-Class part numbers to audit 
Dim rand As Variant 

Do While Acount <= 6 
    'Random number generator 
    rand = Int((6451 - 2 + 1) * Rnd + 2) 
    'checking part class ***If statement gives error*** 
    If Sheets("PARTS").Cells(rand, 5).Value = "A" Then 
     Acount = Acount + 1 
     'audit list copies cell from parts list 
     Sheets("AUDIT POPULATOR").Cells(Acount, 1).Value = Sheets("PARTS").Cells(rand, 1).Value 
    Else 
     Acount = Acount 
     Sheets("AUDIT POPULATOR").Cells(Acount, 1).Value = "" 
    End If 
Loop 
+0

какая линия останавливается? – JamTay317

+0

Ваш макрос работает из той же книги, что и «Листы» («ЧАСТИ»)? Существуют ли листы («ЧАСТИ»)? Всегда ли это ломается, или просто с некоторыми значениями rand? –

+0

Ошибка возникает, если я останавливаю ее на «Acount = Acount + 1» Так что я думаю, что оператор If вызывает ошибку – Diego

ответ

0

, потому что вы Didnt инициализации «ACount» переменной, поэтому его пустым, следовательно, вы получите ошибку 1004. Также я рекомендую использовать «вариант явно» заявление, чтобы предотвратить такие ошибки. вот ваш код с недостающими частями:

Option Explicit 
Private Sub CommandButton1_Click() 
'While loop to obtain 6 A-Class part numbers to audit 
Dim rand As Variant 
Dim Acount As Integer 
Acount = 1 ' 1 or whatever number you would like to get start... 
Do While Acount <= 6 
'Random number generator 
rand = Int((6451 - 2 + 1) * Rnd + 2) 
'checking part class ***If statement gives error*** 
If Sheets("PARTS").Cells(rand, 5).Value = "A" Then 
    Acount = Acount + 1 
    'audit list copies cell from parts list 
    Sheets("AUDIT POPULATOR").Cells(Acount, 1).Value = Sheets("PARTS").Cells(rand, 1).Value 
Else 
    Acount = Acount 
    Sheets("AUDIT POPULATOR").Cells(Acount, 1).Value = "" 
End If 
Loop 
End Sub 
+0

Хм. Не уверен, что это весь его код, который он опубликовал. Также, если вы не инициализируете переменную, я думаю, что она начинается с 0 и будет работать. Например, когда вы делаете цикл for с 'for i = 1'. Редко это инициализировано. Я думаю, что это проблема. Он заставил его быть целым, но, возможно, что-то не так. – findwindow

+0

Спасибо за понимание, к сожалению, я инициализировал Acount (как целое, затем Acount = 0). Я только опубликовал цикл, который дал мне проблемы. Я посмотрю, поможет ли опция явным образом. – Diego

+0

Вы правы, но, как вы сказали, это начинается с 0 и нет 0 строк, и поэтому есть ошибка – Jonathan

Смежные вопросы