2013-07-31 7 views
0

Я довольно новичок в VBA, но до сих пор я иду. До этого момента, когда я застрял с этим вызовом.Excel VBA - изменение событий не работает

Моя цель - выбрать процент (10, 90 или 100) из выпадающего меню в ячейке в столбцах B, C, D или E и когда выбран один из процентов, я хочу, чтобы одна и та же ячейка вычислить выбранный процент значения в столбце A.

Итак, когда ячейка в столбце A имеет значение «500» и в той же строке в столбце CI выберите «90», я хочу, чтобы 90 было заменено на 450 (0,9 * 500)

Код, приведенный здесь, у меня есть до сих пор, в том числе некоторый код, уже «заимствованный» из другой темы. Хотя он работает в новом, чистом листе Excel, он не будет работать в документе, где я хочу, чтобы он работал.

У некоторых из вас есть идеи, где можно обнаружить недостатки? (я даже создал CommandButton только задачу: Application.EnableEvents = True)

Private Sub Worksheet_Change(ByVal Target As Range) 

On Error GoTo Whoa 

If Not Intersect(Target, Range("B:D")) Is Nothing Then 
    Application.EnableEvents = False 
    If Target.Value = 90 Then Target.Value = 0.9 * Cells(Target, 1).Value 
    ElseIf Target.Value = 10 Then Target.Value = 0.1 * Cells(Target, 1).Value 
    ElseIf Target.Value = 100 Then Target.Value = Cells(Target, 1).Value 
    Else 
     MsgBox "Not a valid percentage" 
    End If 

Letscontinue: 
    Application.EnableEvents = True 
    Exit Sub 
Whoa: 
    MsgBox Err.Description 
    Resume Letscontinue 
End Sub 
+0

YOu говорят, что это Безразлично Не работай. Что конкретно не работает? Вы получили сообщение об ошибке? Неожиданные результаты? Опишите проблему, о которой вы говорите, более подробно. –

+0

Если вы добавили этот код только к листу, тогда только изменения на этом листе будут запускать ваш код. Это дубликат http://stackoverflow.com/questions/10474356/vba-worksheet-change-event? – km1

ответ

0

Похоже, вы хотите Workbook_SheetChange событие. Добавьте свою логику в эту книгу в редакторе VBA.

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) 
    MsgBox "Cell changed. Target: " & Target.Worksheet.Name & "!" & Target.Address 
End Sub 

С учетом указанных выше кода добавляется к ThisWorkbook изменений на любом листе в книге будет инициировать событие.

+0

Привет, км1, спасибо за код. Сегодня утром я узнал, что, когда я повторно открываю документ, код работает нормально. Кроме того, я заменил ElseIf на «If's». Кажется, что все стало лучше. –

0

Вам не нужен VBA, чтобы делать то, что вы просите. Проверка данных, и формула будет работать:

Data Validation Example

+0

Привет, Шон, спасибо за вашу реакцию. Мне действительно нужен VBA, потому что у меня более 40 периодов, поэтому более 40 столбцов, где потенциально может наступить процент затрат. Поэтому я стараюсь избегать использования 40 дополнительных столбцов с формулами. Также количество строк может легко переместиться более чем на 1000, поэтому, чтобы сохранить документ небольшим, я думаю, что только макрос будет лучше. –

0

означает, что вы получили останавливали ошибки при application.enableevents = ложь, и у снова побежал вещь без application.enableevents = истина между ...

я на самом деле есть кнопка для этого вопроса, только когда я отладки кода, или в редакторе VB, Ctrl + G, в ближайшем окне, вы можете написать application.enableevents = истинные

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