У меня есть следующий код, который создает ссылки на лист сводки на нескольких листах CS. Количество листов CS генерируется на одном главном листе CS с использованием другого модуля кода. Код работает, но очень медленно при создании нескольких листов CS. Как я могу сделать его более эффективным?Более эффективная подпрограмма
Sub CSrefs()
'
' Adds links from Summary Sheet to CS Sheets:
Dim i As Integer
Dim iOffset As Integer
intCount = ActiveWorkbook.Sheets.Count 'Find total number of workbook sheets
intCS1_Index = Sheets("CS1").Index 'CS1 Sheet index
intCSCount = intCount - (intCS1_Index - 1) 'Find total number of CS sheets
NonCSSheets = intCount - intCSCount 'Find total number of Non-CS sheets
For i = 1 To intCSCount 'number of sheets
iOffset = i + NonCSSheets
Sheets("CS" & i).Select
Range("B3").Select
ActiveCell.Formula = "=SUMMARY!E" & iOffset
Range("A6").Select 'Adds hyperlink to Summery Sheet
ActiveCell.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:="Summary!A" & iOffset, TextToDisplay:="Go to Summary Sheet"
Range("F8").Select
ActiveCell.Formula = "=SUMMARY!F" & iOffset
Range("D8").Select
ActiveCell.Formula = "=SUMMARY!G" & iOffset
Range("B12").Select
ActiveCell.Formula = "=SUMMARY!H" & iOffset
Range("K19").Select
ActiveCell.Formula = "=SUMMARY!S" & iOffset
Range("K49").Select
ActiveCell.Formula = "=SUMMARY!T" & iOffset
Range("K79").Select
ActiveCell.Formula = "=SUMMARY!U" & iOffset
Range("K109").Select
ActiveCell.Formula = "=SUMMARY!V" & iOffset
Range("K139").Select
ActiveCell.Formula = "=SUMMARY!W" & iOffset
Range("K169").Select
ActiveCell.Formula = "=SUMMARY!X" & iOffset
Range("B8").Select
Next i
Sheets("Summary").Select
End Sub
Создание листов - это медленный процесс, но вам не нужны все избранные там, что поможет. Вы просто должны использовать Range («X #»). Formula = «SUMMARY! X» & iOffset. Это может немного сократить обработку. Кроме того, если вы не отключите обновление экрана, это сильно замедлит работу. Подумайте о завершении кода с помощью 'Application.ScreenUpdating = false ... Application.ScreenUpdating = true', чтобы сократить частоту обновления, что может помочь совсем немного. – tmoore82
Поскольку таблицы Excel 2007 имеют емкость для 1 048 576 строк, поэтому я бы добавил, что хорошей практикой является объявление ваших числовых переменных как 'Long', а не' Integer'. Целое число, присвоенное 'Rows.Count', будет генерировать переполнение. – Jeeped