Я написал простой вложенный цикл цикла в VBA, который перебирает записи на моем листе и, если он находит некоторые значения на основе условий, копирует значение в текущем листе ,Excel зависает после попытки манипулирования данными (VBA)
Значения NumRows
и NumRowSTGSales
составляют 4000 и 8000 соответственно. Когда я запускаю код, Excel просто зависает
Dim curRowNo As Long
curRowNo = 2
NumRowSTGSales = Worksheets("Worksheet1").UsedRange.Rows.Count
' Set numrows = number of rows of data.
NumRows = Worksheets("Worksheet2").UsedRange.Rows.Count
' Select cell a1.
' Looping through GL accounts
'Looping through items in GL accounts
For y = 2 To NumRows
'Looping through customer code found in sales data
For z = 2 To NumRowSTGSales
dataGL = Worksheets("Worksheet1").Cells(y, "A").Value
dataItem = Worksheets("Worksheet1").Cells(y, "B").Value
itemSales = Worksheets("Worksheet2").Cells(z, "F").Value
If dataItem = itemSales Then
dataCustomer = Worksheets("Worksheet2").Cells(z, "E").Value
Worksheets("CurrentWorksheet").Cells(curRowNo, "A").Value = dataGL
Worksheets("CurrentWorksheet").Cells(curRowNo, "B").Value = dataItem
Worksheets("CurrentWorksheet").Cells(curRowNo, "C").Value = dataCustomer
curRowNo = curRowNo + 1
End If
Next z
Next y
Знаете ли вы, что вы внутренне вращаете внутреннюю петлю около 32 000 000 раз? Кроме того, в каждом цикле вы делаете несколько ссылок? Когда вы говорите **, он висит **, как долго вы дождались его завершения? – FDavidov
Управление прессой + перерыв и перемычка над 'y'' 'z', чтобы проверить их значения и посмотреть, застряли ли они или зациклились. В конце концов используйте F8 для перехода по вашему коду. –
. Я просто запускал симуляцию с вашим кодом, я «использовал» только 300 строк в «Worksheet1» и 300 строк в «Worksheet2», для завершения макроса потребовалось более 3 минут (3 минуты и 17 секунд). Поэтому представьте себе, что вы запускаете код, который содержит более 100 раз данных. –