Excel 2013에서이 VB 코드를 사용하려면 어떤 단계가 필요합니까?


0

Excel 2013 에서이 질문 의 VB 코드를 사용하려고하는데 작동하지 않습니다. VB에 익숙하지 않으며 간단한 단계가 누락되었을 가능성이 큽니다.

Private Sub Workbook_TwoWayMatch(ByVal Sh As Object, ByVal Target As Range) 
If UCase(Sh.Name) = "sheet1" Or UCase(Sh.Name) = "sheet2" Then 
    If Not Application.Intersect(Target, Range("A1")) Is Nothing Then 
        Application.EnableEvents = False 
        If UCase(Target.Parent.Name) = "SHEET1" Then 
            Sheets("Sheet2").Range("A1") = Target 
        Else 
            Sheets("Sheet1").Range("A1") = Target 
        End If 
        Application.EnableEvents = True 
    End If 
 End If
End Sub

이름이 Sheet1 및 Sheet2 인 워크 시트와 함께 새 통합 문서를 사용하여 Visual Basic에서 다음을 시도했습니다.

  • 코드를 객체에 붙여 넣기 : ThisWorkbook
  • 코드를 개체에 붙여 넣기 : Sheet1 (Sheet1) 및 Sheet2 (Sheet2)
  • 코드를 3 개의 객체 모두에 붙여 넣기
  • 통합 문서가 매크로 사용으로 저장되어 있는지 확인
  • 통합 문서 보안 설정이 VBA 개체 모델에 대한 액세스를 신뢰하도록 설정되고 매크로가 사용되도록 설정

이 코드를 실행하려면 어떻게해야합니까?

Mat 's Mug의 제안에 대한 답변 :

제안한대로 표준 모듈에 코드를 넣고 절차를 공개로 변경하고 범위를 수정했습니다. 그러나 여전히 한 시트의 범위에서 다른 시트로 값을 복사 할 수는 없습니다. 코드는 다음과 같습니다 :

Public Sub Workbook_TwoWayMatch(ByVal Sh As Object, ByVal Target As Range)
If UCase(Sh.Name) = "SHEET1" Or UCase(Sh.Name) = "SHEET2" Then
    If Not Application.Intersect(Target, Range("A1:J23")) Is Nothing Then
        Application.EnableEvents = False
        If UCase(Target.Parent.Name) = "SHEET1" Then
            Sheets("Sheet2").Range("A1:J23") = Target
        Else
            Sheets("Sheet1").Range("A1:J23") = Target
        End If
        Application.EnableEvents = True
    End If
 End If
End Sub

그 서브를 실행하도록 어디에서 말하고 있습니까? 셀 또는 workflow_change 이벤트 또는 다른 위치에서 실행할 수 있습니다. 어딘가에 호출해야합니다.
wbeard52

나는 내가 지금 어디서나 그것을 부르고 있다고 믿지 않는다. 위의 코드는 내가 가진 전부입니다. 내가 찾은 질문을 바탕으로 간단한 복사 및 붙여 넣기 작업이라고 생각했지만 이제는 그렇지 않습니다. 이상적으로는 셀이 변경 될 때마다 실행하고 싶습니다.
raindelay

답변:


1

ThisWorkbookSheetX객체는 특별한 "문서"이다 클래스 모듈; 매크로는 표준 모듈 에서보다 쉽게 ​​노출 되므로, 어디에나 붙여 넣는 대신 새 코드 모듈 (.bas)을 추가하여 붙여 넣습니다.

새 코드 모듈을 추가하는 가장 쉬운 방법은 프로젝트 탐색기 (Ctrl + R)의 아무 곳이나 마우스 오른쪽 버튼으로 클릭 하고 삽입 > 모듈을 선택하는 것 입니다.

다음 문제는 절차가 Private입니다. "비공개"는이 절차를보고 호출해야하는 모든 코드가 동일한 범위 , 즉 동일한 모듈에 있어야 함을 의미합니다. 그것을 Public만들고 당신은 어디서나 그것을 호출 할 수 있습니다.

다음 문제는 매개 변수입니다. 구현에서이 보이는 Sh될 것으로 예상된다 Worksheet개체를 TargetA는 Range객체 : 당신이 매개 변수를 제공해야합니다 절차를 실행합니다.

이를 수행하는 방법에는 여러 가지가 있습니다.

그중 하나가 바로 창 (Ctrl + G)을 불러 와서 직접 호출하는 것입니다.

Module1.Workbook_TwoWayMatch Sheet42, Sheet42.Range("Z123")

물론 전달할 실제 매개 변수는 달성하려는 대상에 따라 다르지만 아이디어를 얻길 바랍니다.


0

문제는 UCase(Sh.Name) = "sheet1"2 행에서 발생하지 않을 수 있습니다.

에 그 변경 시도 "SHEET1""SHEET2".


나는 그것을 시도했지만 아무 효과가 없다.
raindelay
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.