Excel 2010 32비트 모드의 VBA 매크로

Excel 2010 32비트 모드의 VBA 매크로

Excel 2010 64비트를 사용하여 저장한 Excel 시트가 있습니다. 다음과 같은 코드가 있습니다

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row = 1 And Target.Column = 17 Then
Dim iRet As Integer
    Dim arr As Variant
    If Not IsEmpty(Range("B2").Value2) Then
        Exit Sub
    End If
    'Clear the values in columns
    Range("S:AZ").ClearContents

    arr = Split(Target, ",")
    Range("S15:AZ15").NumberFormat = "@"
    Range("S15", Cells(15, UBound(arr) + 19)) = WorksheetFunction.Transpose(WorksheetFunction.Transpose(arr))
    Range("AZ1").Value2 = Target

    Worksheets("MasterPage").Range("X3:X1000").ClearContents
    Worksheets("MasterPage").Range("X3:X1000").NumberFormat = "@"
    Worksheets("MasterPage").Range("X3:X" & UBound(arr) + 3) = WorksheetFunction.Transpose(arr)
End If

서브 끝

Excel 2010 32비트 모드에서 저장된 파일을 실행하려고 하면 실행을 원합니다. 누구든지 이유를 제안할 수 있습니까? 감사해요

답변1

귀하의 의견에 따르면 이 특정 이벤트가 어떤 이유로 트리거되지 않거나 코드가 전혀 트리거되지 않는 것으로 나타났습니다(Excel은 때때로 기본적으로 코드 실행을 방지할 수 있으므로 이에 대해 주의해야 한다는 것을 알고 있습니다).

코드가 전혀 실행되는지 확인해보세요. 문제가 있는지 해결하는 데 도움이 되도록 코드를 명시적으로 실행하기 위해 매크로를 버튼에 연결해 볼 수 있습니다.

답변2

Excel 2010 32비트를 사용해 보았는데 문제 없이 실행되었습니다.

몇 가지 질문:

  1. 코드의 어느 시점에서 Application.EnableEvents를 끄셨나요?
  2. 제공하신 코드에는 End Sub가 없습니다. SU에 복사하여 붙여넣는 과정에서 손실된 것으로 추정되지만 다시 확인하세요.
  3. worksheet_change 이벤트에서 어떤 것이 실행됩니까?

또한 보다 효율적으로 실행될 수 있도록 코드를 몇 가지 변경하겠습니다. 현재 프로시저가 다른 셀을 변경할 때마다 다시 실행됩니다. 여러 번 실행되는 것을 방지하기 위해 이벤트 트리거를 끄고 다시 켜는 몇 줄을 추가했습니다.

Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    If Target.Row = 1 And Target.Column = 17 Then
        Dim iRet As Integer
        Dim arr As Variant
        If Not IsEmpty(Range("B2").Value2) Then
            Application.EnableEvents = True
            Exit Sub
        End If
        'Clear the values in columns
        Range("S:AZ").ClearContents

        arr = Split(Target, ",")
        Range("S15:AZ15").NumberFormat = "@"
        Range("S15", Cells(15, UBound(arr) + 19)) = WorksheetFunction.Transpose(WorksheetFunction.Transpose(arr))
        Range("AZ1").Value2 = Target

        Worksheets("MasterPage").Range("X3:X1000").ClearContents
        Worksheets("MasterPage").Range("X3:X1000").NumberFormat = "@"
        Worksheets("MasterPage").Range("X3:X" & UBound(arr) + 3) = WorksheetFunction.Transpose(arr)
    End If
    Application.EnableEvents = True
End Sub

관련 정보