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
你,我的朋友是绝对的明星! –
谢谢。我对自己的努力方式了解了EnableEvents – 2016-11-16 02:39:44