Это мой первый код для кода в VBA. У меня есть несколько рабочих листов в файле, и они упорядочены по датам. Итак, я пытаюсь сделать сбор данных на листе, если они имеют одинаковый период времени.Бесконечная петля при сборе наборов данных из нескольких листов
date1 value1
date2 значение2
date3 value3
Поскольку они в порядке, я просто сравнить первые значения даты и если они различны он переходит к следующему листу. Если они совпадают, то скопируйте значение и выполните тот же процесс, пока он не достигнет последнего рабочего листа. Однако он копирует один рабочий лист, но после этого Excel замерзает.
Я был бы признателен, если вы обнаружите какие-либо ошибки или дадите мне другие предложения для этого.
Ниже мой код:
Sub matchingStock()
Dim sh1 As Worksheet, sh2 As Worksheet
' create short references to sheets
' inside the Sheets() use either the tab number or name
Set sh1 = Sheets("combined")
Dim col As Long
'since first column is for Tbill it stock price should place from the third column
col = 3
Dim k As Long
'go through all the stock worksheets
For k = Sheets("WLT").Index To Sheets("ARNA").Index
Set sh2 = Sheets(k)
' Create iterators
Dim i As Long, j As Long
' Create last rows values for the columns you will be comparing
Dim lr1 As Long, lr2 As Long
' create a reference variable to the next available row
Dim nxtRow As Long
' Create ranges to easily reference data
Dim rng1 As Range, rng2 As Range
' Assign values to variables
lr1 = sh1.Range("A" & Rows.Count).End(xlUp).Row
lr2 = sh2.Range("A" & Rows.Count).End(xlUp).Row
If sh1.Range("A3").Value = sh2.Range("A3").Value Then
Application.ScreenUpdating = False
' Loop through column A on sheet1
For i = 2 To lr1
Set rng1 = sh1.Range("A" & i)
' Loop through column A on sheet1
For j = 2 To lr2
Set rng2 = sh2.Range("A" & j)
' compare the words in column a on sheet1 with the words in column on sheet2
'Dim date1 As Date
'Dim date2 As Date
'date1 = TimeValue(sh1.Range("A3"))
'date2 = TimeValue(sh2.Range("A3"))
sh1.Cells(1, col).Value = sh2.Range("A1").Value
' find next empty row
nxtRow = sh1.Cells(Rows.Count, col).End(xlUp).Row + 1
' copy the word in column A on sheet2 to the next available row in sheet1
' copy the value (offset(0,1) Column B) to the next available row in sheet1
sh1.Cells(nxtRow, col).Value = rng2.Offset(0, 6).Value
'when the date is different skip to the next worksheet
Set rng2 = Nothing
Next j
Set rng1 = Nothing
Next i
'sh3.Rows("1:1").Delete
Else
GoTo Skip
End If
Skip:
col = col + 1
Next k
End Sub
Вы пробовали переходить через код, чтобы узнать, что на самом деле происходит? Сколько строк вы говорите на каждом листе? – gtwebb
Как показано в @gtwebb, вам нужно увидеть, какой цикл является виновником, поскольку в вашем коде есть несколько. Я предполагаю, что lr1/lr2 меньше 2 на следующем листе. –
У меня около 1000 строк на каждом листе – user3067818