스트리밍 데이터를 통해 특정 값을 얻으면 세 개의 간단한 매크로를 트리거하는 VBA 개체가 Excel 2003에 있습니다. 그것은 잘 실행됩니다. 중복 워크 시트를 열고 싶지만 다른 스트리밍 데이터를 사용하고 각 시트에 매크로 트리거가 있어야합니다. 현재 작동하지만 현재 선택한 워크 시트에서만 작동합니다. 각 워크 시트에는 객체와 매크로가 있습니다.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
그리고 - 그들은 본질적으로 동일합니다 - 서로 다른 위치에 같은 위치에 복사 만 붙여 넣습니다
다음은 VBA 개체입니다. 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