1

У меня есть лист Excel, который сохранен с использованием Excel 2010 64-битной. Имеет следующий код

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

End Sub

Если я пытаюсь выполнить сохраненный файл в Excel 2010 32-битном режиме, он хочет выполнить. Кто-нибудь может подсказать причину. Спасибо

2 ответа2

0

Ваши комментарии предполагают, что либо это конкретное событие не вызывается по какой-либо причине, либо код вообще не запускается (я знаю, что Excel иногда может предотвратить выполнение кода по умолчанию, поэтому следите за этим)

Попробуйте посмотреть, выполняется ли какой-либо код вообще. Вы можете попробовать подключить макрос к кнопке, чтобы явно запустить код, чтобы помочь вам разобраться, если это проблема.

0

Я попробовал на Excel 2010 32-разрядный, и он прошел без проблем.

Несколько вопросов:

  1. Вы выключили приложение.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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .