2011-03-18 7 views
1

나는 sheet1의 행을 강조 표시 할 때 매크로가이 행의 모든 ​​정보를 가져 와서 시트 2에 표시합니다. sheet1의 다른 행을 강조 표시하면 sheet2의 정보가 변경되어 해당 행의 정보가 표시됩니다.Excel에서 매크로 코드를 통해 표시된 셀의 정보를 편집하는 방법은 무엇입니까?

제 문제는 sheet2에 표시된 정보를 변경하면 sheet1의 정보가 변경되지 않는다는 것입니다. 이 기능을 추가 할 수있는 방법이 있습니까?

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
Dim myList 
If Target.Address <> Target.EntireRow.Address Then Exit Sub 
If Target.Rows.Count > 1 Then Exit Sub 
myList = [{"B1","B2","B3","B4","B5","B6","B7","B8","B9","B10","B11","B12","B13","B14","B15"}] '<- adjust to your need 
With Target.EntireRow 
    For i = 1 To UBound(myList) 
     Sheets("sheet2").Range(myList(i)).Value = .Cells(i).Value 
    Next 
End With 
End Sub 

상관 도움말 좋지 않을까 :

나는 순간에 다음과 같은 코드가 있습니다! :)

+0

sheet2가 무엇인지 모르겠습니다. 매크로를 사용하여 sheet1에 자동 필터를 실행할 수 없습니까? –

+1

Sheet2는 실제로 sheet1의 오른쪽으로 끝까지 스크롤하지 않고도 sheet1의 특정 행에서 모든 것을 명확하게 볼 수 있도록 해줍니다. 따라서 sheet1의 행을 강조 표시하면 sheet2로 변경하고 해당 행의 정보를 세로 레이아웃으로 명확하게 볼 수 있습니다. 이 작업을 수행하는 더 좋은 방법이 있는지 확실하지 않은가요? 나는이 분야의 초심자이다! :) – ade123

+0

이 코드는 전체 행이 선택되었을 때만 작동합니다. 단일 셀의 값을 변경하면'If Target.Address <> Target.EntireRow.Address Then Exit Sub' 행은 나머지 코드를 실행하지 않고 프로 시저를 종료합니다. –

답변

0

sheet1 행을 sheet2에 복사 한 후에 값이 나온 원래 행 #을 기록 할 수도 있습니다. 그런 다음 sheet2 값을 sheet1의 값과 비교하는 추가 매크로를 추가하여 변경 사항을 마이그레이션 할 수 있습니다.

가능한 기본 흐름 :

  • 사본 시트 1 행 (현재 매크로) 시트 2 할
  • Sheet1의 행 번호 (즉, 한 행 아래) 시트 2 할
  • 는 시트 2
  • 사본에 변경
  • 사본 sheet2 행 - sheet1 행 (sheet2에 저장된 행 # 사용) -> 여기서는 sheet1을 변경하지 않는다고 가정합니다.
+0

oooohhh ... 조금 복잡해 보인다! : o (필자는 엑셀에서 특히 매크로를 작성하는면에서 그다지 좋지 않습니다.) – ade123

+0

@ ade123 - 제 답변에 몇 가지 덧글을 추가했습니다. –

0

전체 단일 행이 선택되었을 때를 인식하기 위해 현재 Worksheet_SelectionChange 이벤트 매크로를 사용하고 있습니다. Worksheet_Change B1 : B15 범위의 값이 변경되었을 때 인식하고 변경 내용을 Sheet1에 다시 전달할 때 Sheet2에 대한 이벤트 매크로가 필요합니다. Worksheet_Change이 값의 변화에 ​​트리거

때문에 당신은 시트 1의 Worksheet_SelectionChange 하위의 값을 쓸 때, 당신은 그래서 트리거 하지이라는 Application.EnableEvents property을 해제해야합니다.

당신은 공용 변수의 몇 가지를 필요로 할 것입니다. 하나는 변경 사항을 반환해야하는 위치를 기억하고 다른 하나는 Sheet2의 대상 셀을 찾습니다. 모듈 코드 시트에서만 공개 할 수 있습니다. 내가 원래 Worksheet_SelectionChange 작은 수정의 몇 가지를 만들어 이벤트 처리의 비활성화를 추가 한

Option Explicit 

Public Const sRNG As String = "B1:B15" 
Public rRNG As Range 

으로 Module1 (코드) -

Book1을.

Book1을 - 시트 1 (코드) 워크 시트 .CodeName property

Option Explicit 

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
    If Target.Cells.Count = Columns.Count And Target.Rows.Count = 1 And _ 
     CBool(Application.CountA(Target)) Then '<~~ one complete non-blank row 
     On Error GoTo bm_Safe_Exit 
     Application.EnableEvents = False 
     With Sheet2.Range(sRNG) 
      Set rRNG = Target.Cells(1, 1).Resize(.Columns.Count, .Rows.Count) 
      .Cells = Application.Transpose(rRNG.Value) 
     End With 
    End If 

bm_Safe_Exit: 
    Application.EnableEvents = True 
End Sub 

는 워크 시트가 통상적으로 이름을 바꿀 경우이 변경되지 않기 때문에 시트 2를 식별하는 데 사용되었다.

변경된 값을 반환하기 위해 행을 식별하려는 방법에 대해 약간의 불확실성이 있습니다. 필자는 Sheet1에서 Sheet2로 값이 전송 된 마지막 위치를 기록하기 위해 Module1에 선언 된 공용 범위 형식 변수를 사용했습니다.Sheet2를 변경하면 마지막으로 기록 된 위치로 되돌아갑니다.

Book1을 - 시트 2 (코드)을 '기억'의 위치는 메모리에 있음을

Option Explicit 

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Not Intersect(Target, Range(sRNG)) Is Nothing Then 
     Debug.Print rRNG.Address(0, 0, external:=True) 
     On Error GoTo bm_Safe_Exit 
     Application.EnableEvents = False 
     rRNG = Application.Transpose(Range(sRNG).Value) 
    End If 

bm_Safe_Exit: 
    Application.EnableEvents = True 
End Sub 

참고. 통합 문서를 닫았다가 다시 열면 효과적으로 '0'이됩니다. Sheet1에서 값을 새로로드하지 않으면 Sheet2를 변경하지 마십시오.

관련 문제