У меня есть объект VBA в Excel 2003, который запускает три простых макроса, когда определенные значения достигаются с помощью потоковых данных. Это работает хорошо. Я хотел бы открыть дубликат рабочего листа, но с различными потоковыми данными, а также запускать макросы на своих соответствующих листах. Он работает сейчас, но только на листе, который я сейчас выбрал. На каждом листе есть объект и макросы.Макросы VBA на двух листах
Объект отслеживает три ячейки, и когда первая ячейка запускается, продолжает следить за следующей ячейкой, а при срабатывании контролирует следующую ячейку, затем повторяет.
Я бы помог им одновременно запустить их на своих электронных таблицах одновременно.
Вот объект VBA:
Private Sub Worksheet_Calculate()
Static oldval1
Static oldval2
Static oldval3
Static LastAction As Integer
' Initial state will be 0, neither Fast nor Slow
Const Fast As Integer = 1
Const Fast2 As Integer = 2
Const Slow As Integer = 3
Application.EnableEvents = False
If Range("I1").Value = "1" And oldval1 <> "1" And LastAction <> Fast Then
PasteFast
LastAction = Fast
ElseIf Range("Q1").Value = "1" And oldval2 <> "1" And LastAction <> Slow Then
PasteFast2
LastAction = Fast2
ElseIf Range("Y1").Value = "1" And oldval3 <> "1" And LastAction <> Slow Then
PasteSlow
LastAction = Slow
End If
oldval1 = Range("I1").Value
oldval2 = Range("Q1").Value
oldval3 = Range("Y1").Value
Application.EnableEvents = True
End Sub
И вот три макроса - они, по существу, то же самое - они копируют с того же места, но вставить в разных местах. PasteSlow и PasteFast находятся на одном модуле, а PasteFast2 - на втором модуле (без причины).
Sub PasteSlow()
'
' PasteSlow Macro
'
'
Application.ScreenUpdating = False
Range("G5:G57").Select
Selection.Copy
Range("H5").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("K5:K57").Select
Application.CutCopyMode = False
Selection.Copy
Range("L5").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A1").Select
End Sub
Sub PasteFast()
'
' PasteFast Macro
'
'
Application.ScreenUpdating = False
Range("g5:g57").Select
Selection.Copy
Range("P5").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("k5:k57").Select
Application.CutCopyMode = False
Selection.Copy
Range("T5").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A1").Select
End Sub
Sub PasteFast2()
'
' PasteFast2 Macro
'
'
Application.ScreenUpdating = False
Range("g5:g57").Select
Selection.Copy
Range("x5").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("k5:k57").Select
Application.CutCopyMode = False
Selection.Copy
Range("ab5").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A1").Select
End Sub
Я прошу прощения за любые ошибки форматирования кода.
Попробуйте открыть его в другом экземпляре Excel? –
VBA не поддерживает многопоточность. Так как @SiddharthRout предложил либо открыть листы в отдельных экземплярах Excel, либо, возможно, макросы по очереди, на которых он работает. – ARich