2013-04-16 2 views
6

Вот что мне нужно сделать: когда я что-то написал в ячейке на листе, мой код Worksheet_Change должен проверить, содержит ли ячейка определенные символы, а затем заменяет эти символы. Эта часть кода работает нормально.Copy-paste не вызывает workheet_change

Однако есть несколько странное поведение. Вот код до сих пор:

Private Sub Worksheet_Change(ByVal Target As Range) 
     Target.Value = Replace(Target.Value, "ß", "ß") 

     MsgBox "This is the value: " & Target.Value 
    End Sub 

То, что происходит в том, что, когда у меня есть символы, которые нужно изменить в моей буфер обмена (с помощью Ctrl + C). Когда я дважды щелкаю по ячейке, вставьте символы в ячейку, используя Ctrl + V, а затем нажмите Enter, код работает просто отлично, символы изменены. (Примечание: без двойного щелчка вы не можете видеть курсор.)

Однако, если я просто иду в камеру с помощью клавиш со стрелками и вставляю все, что находится в ячейке, ничего не происходит. Я подозреваю, что Worksheet_Change даже не срабатывает, иначе он по крайней мере отобразит мой MsgBox.

(я не знаю, если это отношение к этому, но я использую Excel 2010 в Mac)

+2

Если скопировать и вставить значение из * внутри * Excel, делает 'огонь событие _Change'? [Этот поток] (http://answers.microsoft.com/en-us/mac/forum/macoffice2011-macexcel/worksheetchange-not-firing-on-paste/a1cd9b4a-1541-4988-83ef-1c9903f7cb33?msgId=9a4dac82 -69dc-4655-9106-eb5f8d4e388e) предполагает, что в Excel для Mac имеется ошибка, если при вставке из другого приложения событие '_Change' не срабатывает. –

+3

Yup @DavidZemens. Ты прав. Это ошибка Excel2011. Я не смог проверить его для Excel2010 на Mac, хотя. –

+0

Событие _Change также не срабатывает. Значит, это ошибка? – flamingo

ответ

0

при работе с Worksheet_Change случае Всегда используйте EnableEvents свойство. Для получения более подробной информации link

Private Sub Worksheet_Change(ByVal Target As Range) 

On Error GoTo err_rout 


    Application.EnableEvents = False 

    If Target.Count > 1 Then Exit Sub 

    Target.Value = Replace(Target.Value, "ß", "ß") 

    MsgBox "This is the value: " & Target.Value 

err_rout: 
    Application.EnableEvents = True 
End Sub 

enter image description here

+0

Большое вам спасибо, но неудобно, что тоже не работает.Все-таки такое же поведение. – flamingo

+0

@flamingo Надеюсь, вы ввели код в раздел кода рабочего листа. – Santosh

+0

Я предполагаю, что вы имеете в виду окно с раскрывающимися окнами, где я выбираю рабочий лист слева, а затем функцию изменения справа? Редактор Visual Basic? (Извините, мой excel на немецком языке :) Да, я помещаю код в раздел кода ниже этого окна с двумя раскрывающимися меню. – flamingo

1

Вы можете использовать Worksheet_Calculate на спусковом листе.

  • Создайте новый лист, который содержит только ссылку на диапазон вы хотите смотреть (т.е. = Лист1! A1: B3)
  • Добавить макрос под названием Worksheet_Calculate к вашему спускового листа
  • Теперь, когда любой дата в связанном диапазоне изменяет перерасчет вашего триггерного листа, который, в свою очередь, выдает ваш макрос

Это также работает, когда пользователь вводит формулу в соответствующей ячейке и один из предшествующих изменений.

С помощью ручного расчета пересчет триггерного листа и макроса происходит только тогда, когда пользователь нажимает F9.

0
If Target.Column = 3 Then 
    Dim startRow As Integer 
    Dim endRow As Integer 
    startRow = Target.Row 
    endRow = Target.Row + Target.Count - 1 

    For i = startRow To endRow 
     ' blah blah blah 

может быть, это помогает

+0

@ DigitalTrauma, будьте осторожны при форматировании кода. Вы оставили теги '
'. – gunr2171

+0

@ gunr2171 - oops извините об этом. Думаю, редактирование с телефона - не лучшая идея. : - / –

Смежные вопросы