VBA验证崩溃我的工作簿

问题描述:

我有VBA代码来更改单元上的验证取决于所选的选项。VBA验证崩溃我的工作簿

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。

我试过谷歌搜索,但一直没有能够翻译到我有。

干杯,

在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 – 2016-11-16 02:39:44