2017-12-11 5 views
1

변화가있는 테이블을 다른 시트에 복사해야하는 프로젝트를 만들고 있는데, 데이터 전송 물결 시트가 동기화되어야합니다. 하나의 양식 데이터를 채우려면 데이터를 전송해야합니다. 모든 시트.내가 런타임 오류가 발생했습니다.

Option Explicit 


Private Sub Worksheet_Change(ByVal Target As Range) 
Dim KeyCells As Range 

Set KeyCells = Range("C4:E8") 

If Not Application.Intersect(KeyCells, Range(Target.Address)) _ 
     Is Nothing Then 

     Worksheets("sheet1").Range("D4:D8").Copy _ 
Destination:=Worksheets("sheet2").Range("D4:D8") 


    'MsgBox "Cell " & Target.Address & " has changed." Just for code testing don't look at it 

End If 
End Sub 
+0

워크 시트 모듈에이 코드가 있습니까? –

+0

워크 시트 모듈에이 코드가 있습니까? 그게 무슨 뜻이야? VBA에서 방금 시작했습니다. –

+0

시트 이름 중 하나의 철자가 잘못되었습니다. 탭의 시트 이름과 일치하지 않습니다. 공백이나 다른 숨겨진 문자가 없는지 다시 확인하십시오. –

답변

0

워크 시트가 2 개인 경우를 상상해보십시오. 여기, 첫 번째 워크 시트에 다음 코드를 넣습니다 :

enter image description here

Option Explicit 

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim KeyCells As Range 

    If Target.Count > 1 Then 
     MsgBox ("More than 1!") 
     Exit Sub 
    End If 

    Set KeyCells = Range("C4:E8") 
    If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then 
     Worksheets(1).Range("C4:E8").Copy Destination:=Worksheets(2).Range("C4:E8") 
    End If 

End Sub 

C4:E8의 데이터의 변화되면, 그것은 두 번째 워크 시트에 복사 할 것입니다.


두 번째 워크 시트에 넣으면 재귀 오류가 발생합니다. 원한다면 사용해보십시오! :)

편집 : 이 질문에는 다양한 방법이 있습니다. 이 세포를 통해 반복과 방법 : 명시

옵션을 사용 한 후 세포를 병합 한 경우

Option Explicit 

Private Sub Worksheet_Change(ByVal Target As Range) 

    Dim KeyCells As Range 
    Dim rngCell  As Range 

    Set KeyCells = Worksheets(1).Range("C4:E8") 

    If Not Application.Intersect(KeyCells, Target) Is Nothing Then 
     For Each rngCell In KeyCells 
      Worksheets(2).Cells(rngCell.Row, rngCell.Column) = rngCell 
     Next rngCell 
    End If 

End Sub 

그러나이 중 worksheets(1) 또는

+0

작동하지 않지만 시트 1에 3 행의 셀이 1 행에 있고 시트 2에 셀이 없을 수 있습니까? –

+0

@ JānisAnerauds - 병합 해제 및 시도! :) – Vityata

+0

은 여전히 ​​아래 첨자를 범위 외 –

0

worksheets(2)에서 잘 작동하지 않습니다

Private Sub Worksheet_Change (ByVal 대상 범위로)

Dim KeyCells As Range 
Dim rngCell  As Range 

Set KeyCells = Worksheets(1).Range("C4:E8") 

If Not Application.Intersect(KeyCells, Target) Is Nothing Then 
    For Each rngCell In KeyCells 
     Worksheets(2).Cells(rngCell.Row, rngCell.Column) = rngCell 
    Next rngCell 
End If 

enter image description here

관련 문제