2016-02-20 2 views
0

Итак, я пытаюсь использовать VBA в Excel для автоматического создания рабочего листа на основе некоторых входов.VBA Назначить значение переменной ячейкам

Моя проблема в том, что когда я пытаюсь назначить переменную ячейке с VBA, ничего не происходит.

Этот тест код работал:

Worksheets(sheetName).Cells(1, 1).Value = 1 

Этот код (код, который я забочусь о) не будет:

Const ROW_START As Integer = 3 

For row = ROW_START To (ROW_START + 10000) Step 1 
    Worksheets(sheetName).Cells(row, RAM_COL).Value = Rnd() 
Next 

Это также работает, хотя она используется только Rnd() один раз (что Я должен был ожидать):

Worksheets(sheetName).Range("A1:A10000") = Rnd() 

У меня есть множество таких петель, ни одна из которых не работает. Я также пытаюсь назначить строки значениям ячеек через некоторое время, что также не работает.

Рабочий лист, на который ссылается sheetName, создается без каких-либо проблем.

Спасибо за любую помощь вы можете предоставить

+1

Какая строка вашего кода вызывает ошибку? –

+1

Я проверил цикл и добавлял в ячейки штраф для меня, я бы предположил, что проблема с 'sheetName' или' RAM_COL' не определяется. Как упоминалось в alex, рекомендуется пропустить код (используя F8), чтобы сузить место, где возникла проблема. –

+0

Моя проблема была опечаткой в ​​одном из имен переменных (все вышеперечисленные переменные были инициализированы, только один wasn ' t правильное имя). Я также прошел через код, и он никогда не прерывался, он просто ничего не делал. Также не было указаний на excel VB IDE, что var не был объявлен. (RAM_COL должен был быть RAND_COL btw). – jgrad

ответ

2

Beyond необъявленных или присвоенных в переменных, массовая загрузка формула и возврат к значениям результата будет значительно ускорить работу.

Dim rw As Long, row_start As Long, row_end As Long, ram_col As Long, sheet_name As String 
row_start = 3 
row_end = row_start + 10000 
ram_col = 1 
sheet_name = "Sheet2" 

With Worksheets(sheet_name) 
    'this should take less than ½ second 
    With .Range(.Cells(row_start, ram_col), .Cells(row_end, ram_col)) 
     .Clear 
     .Formula = "=rand()" 
     .Value = .Value2 
    End With 

    'this takes 3-4 seconds 
    For rw = row_start To row_end Step 1 
     .Cells(rw, ram_col).Value = Rnd() 
    Next 

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