2016-11-16 7 views
0

У меня есть код VBA для изменения валидации на ячейке в зависимости от выбранной опции.VBA Validation сбивает мою книгу

Sub Worksheet_Change(ByVal Target As Range) 
    Dim ws As Worksheet 
    Set ws = Sheets("lkup") 

    Dim VariationList As Variant 
    VariationList = Application.Transpose(ws.Range("Resource_List")) 
    For i = LBound(VariationList) To UBound(VariationList) 

    Next i 
     If Target = Range("B15") Then 
     If InStr(1, Range("B15"), "Resource") > 0 Then 
      With Range("D15").Validation 
       .Delete 
       .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _ 
        Operator:=xlEqual, Formula1:=Join(VariationList, ",") 
       .IgnoreBlank = True 
       .InCellDropdown = True 
       .InputTitle = "" 
       .ErrorTitle = "" 
       .InputMessage = "" 
       .ErrorMessage = "" 
       .ShowInput = True 
       .ShowError = True 
      End With 
     ElseIf InStr(1, Range("B15"), "Fixed Asset") > 0 Then 
      Range("D15").Validation.Delete 
      Range("D15").ClearContents 
      With Range("D15").Validation 
       .Delete 
       .Add Type:=xlValidateWholeNumber, AlertStyle:=xlValidAlertStop, _ 
        Operator:=xlBetween, Formula1:="100000", Formula2:="999999" 
       .IgnoreBlank = True 
       .InCellDropdown = True 
       .InputTitle = "" 
       .ErrorTitle = "Oopps" 
       .InputMessage = "" 
       .ErrorMessage = "Your fixed asset number can only be 6 numbers" 
       .ShowInput = True 
       .ShowError = True 
      End With 
     Else 
      Range("D15").ClearContents 
      Range("D15").Validation.Delete 
     End If 
    End If 
End Sub 

Это работает в то время как книга открыта. Он работает нормально, никаких ошибок или чего-либо еще. Однако, когда я сохраняю и снова открываю книгу, это дает мне следующее:

Мы обнаружили, что проблема связана с некоторым содержимым в «Invoice.xlsm». Вы хотите, чтобы мы попытались восстановить как можно больше? Если вы доверяете источнику этой книги , нажмите «Да».

Затем он открывает книгу, заполняет все мое форматирование и удаляет VBA.

Я пробовал Google, но не смог перевести это на то, что у меня есть.

Приветствия,

ответ

2

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

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

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
    On Error GoTo ResumeEvents 
    Application.EnableEvents = False 

    '----{Code}------ 
ResumeEvents: 
    Application.EnableEvents = True 
End Sub 
+0

Вы, мой друг, являются абсолютной звездой! –

+0

Спасибо. Я узнал об EnableEvents на своем пути., Lol –

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