#vba #excel
#vba #excel
Вопрос:
Я хочу выполнить цикл обработки данных и скопировать определенные ячейки с одного листа на другой. Используя «длинный», я могу заставить работать следующее :
Sub Update()
Dim Template As Worksheet: Set Template = Worksheets("ImportTemplate")
Dim Master As Worksheet: Set Master = Worksheets("Master")
Dim a As Long, x As Long
With Master
For a = 2 To .Range("A" amp; Rows.Count).End(xlUp).Row
Select Case .Range("A" amp; a).Value
Case "S"
x = Template.Range("A" amp; Rows.Count).End(xlUp).Row 1
Template.Range("A" amp; x).Value = .Range("E" amp; a).Value 'Site Details
Template.Range("B" amp; x).Value = .Range("AO" amp; a).Value 'Meter Details
Case "M"
Case "C"
Case Else
End Select
Next a
.Select
End With
End Sub
Есть ли какой-нибудь «лучший» способ сделать это? Там будет гораздо больше ячеек для обновления, так что это не ограничивается 2, показанными, например
Комментарии:
1. Если ячеек много, я бы, вероятно, работал с массивами VBA, а не переходил туда и обратно к рабочим листам.
Ответ №1:
Вы могли бы включить
' at the start
Dim priorCalculationSetting as Long
Application.ScreenUpdating = False
priorCalc = Application.Calculation
Application.Calculation = xlCalculationManual
...your code here...
' at the end
Application.ScreenUpdating = True
Application.Calculation = priorCalculationSetting