У меня есть таблица Excel, сохраненная с помощью Excel 2010 64 Bit. В ней есть следующий код
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 Bit mode, он хочет выполниться. Может кто-нибудь подсказать причину. Спасибо
решение1
Ваши комментарии предполагают, что либо это конкретное событие не запускается по какой-то причине, либо вообще не запускается никакой код (я знаю, что Excel иногда может по умолчанию предотвращать выполнение кода, так что будьте начеку).
Попробуйте посмотреть, выполняется ли вообще какой-либо код. Вы можете попробовать привязать макрос к кнопке, чтобы явно запустить код, чтобы помочь вам разобраться, в этом ли проблема.
решение2
Я попробовал в Excel 2010 32-бит, и все заработало без проблем.
Несколько вопросов:
- Вы отключили Application.EnableEvents в какой-то момент своего кода?
- В предоставленном вами коде нет End Sub. Я предполагаю, что он был утерян при копировании и вставке в SU, но проверьте еще раз.
- Будет ли что-нибудь выполнено при событии 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