我有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。
我已经尝试过谷歌搜索,但我们无法将其翻译成我所拥有的。
干杯,
答案 0 :(得分:2)
在使用Worksheet_Change
更改ActiveSheet上的值之前,您需要关闭事件。这可以防止Worksheet_Change
再次触发并可能导致无限循环。确保在事件退出之前重新打开它们。
最好添加一个错误处理程序,以便在出现问题时自动重新启动事件。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error GoTo ResumeEvents
Application.EnableEvents = False
'----{Code}------
ResumeEvents:
Application.EnableEvents = True
End Sub