2015-08-01 2 views
0

Я боролся с этим в течение нескольких дней.
У меня есть код ниже, который копирует и вставляет значение, когда выполняется определенное условие If (у книги есть живые данные, подаваемые на несколько листов каждую секунду).
Код в настоящее время находится в модуле, так как условие IF может применяться ко всем листам в книге.Применение кода Excel VBA в модуле ко всем листам

Проблема, которая возникает у меня, это код, который работает только на активной карте. Мне нужно, чтобы он работал на всех листах книги. Я пробовал несколько циклов без успеха. В идеале мне нужен код для работы по всем листам в фоновом режиме (т. Е. Без их активации). Любая помощь будет оценена.

Dim TimeToRun 

Sub auto_open() 
    Call SchedulePrices 
End Sub 

Sub SchedulePrices() 
    TimeToRun = Now + TimeValue("00:00:15") 
    Application.OnTime TimeToRun, "CopyPrice" 
End Sub 

Sub CopyPrice() 
    Calculate 

If Range("AM7") = "1" Then 

    Range("AM10:AM69").Value = Range("K9:K68").Value 
    Range("AL10:AL69").Value = Range("B9:AM68").Value 
    Range("AM8:AM9").Value = Range("C2:C3").Value 

End If 

'run the timer sub 
    Call SchedulePrices 

End Sub 

Sub auto_close() 
    On Error Resume Next 
    Application.OnTime TimeToRun, "CopyPrice", , False 
End Sub 

ответ

0
Sub CopyPrice() 
    Dim sht as Worksheet 



    For Each sht in Worksheets 
     If sht.Range("AM7") = "1" Then 
      sht.Calculate 

      sht.Range("AM10:AM69").Value = sht.Range("K9:K68").Value 
      sht.Range("AL10:AL69").Value = sht.Range("B9:AM68").Value 
      sht.Range("AM8:AM9").Value = sht.Range("C2:C3").Value 

     End If 
    Next 

'run the timer sub 
    Call SchedulePrices 

End Sub 
+0

Может хотите, чтобы принести 'Calculate' в петлю и запустить' sht.Calculate', а также. – Bond

+0

Исправлено. Спасибо @Bond – DiegoAndresJAY

+0

Спасибо большое. Кажется, отлично работает. Хотел бы я задать вопрос несколько дней назад! – Seale

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