Sub RemValidation()
Dim ARows As Variant
Dim i As Double
ARows = Split("C3,C4,C5,C6,C14,C19,C20,C25,F4", ",")
For i = 0 To UBound(ARows)
ThisWorkbook.Sheets("WO").Range(ARows(i)).Validation.Delete
Next
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
On Error Resume Next
ws.Cells.SpecialCells(xlCellTypeAllValidation).Validation.Delete
On Error GoTo 0
Next ws
End Sub
Sub Test()
Worksheets("Sheet1").Activate
With rng.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=SheetName!$A$2:$A$19" 'Replace SheetName and the range with yours
End With
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim wkbk As Workbook
Dim wksh1 As Worksheet
Set wkbk = ActiveWorkbook
Set wksh1 = wkbk.Sheets("RTNL Gen")
'Step 1: Activate the message box and start the check
Select Case MsgBox("Save and Close?", vbOKCancel, "Rationale Generator"
'Step 2: Cancel button pressed, cancel the close
Case Is = vbCancel
Cancel = True
'Step 3: OK button pressed, DELETE VALIDATION, save the workbook and close
Case Is = vbOK
wksh1.Range("A2").Validation.Delete
wkbk.Save
'Step 4: Close your Select Case statement
End Select
End Sub
6条答案
按热度按时间lp0sw83n1#
当我在DataValidation对话框中定义了一个很长的DataValidation列表时,我就遇到了这个错误(尽管我现在不能重现它)。如果对话框中有一个长列表,请尝试将列表移动到某个范围,然后引用该范围。
nhn9ugyo2#
我的工作簿也有同样的问题。我发现这个链接最有帮助-https://stackoverflow.com/a/21483680/3653412。
虽然接受的答案最终会为我解决这个问题(重建工作簿),但这将花费大量的时间。清除排序字段最终为我解决了问题。
q3qa4bjr3#
通过删除验证单元格并再次运行代码以在打开工作簿时进行重新验证,可以解决此问题
whhtz7ly4#
这个问题已经过时了,但可能仍然有人在寻找解决这个问题的方法。当我打开包含使用VBA代码创建的数据验证列表的工作簿时,我遇到了同样的问题。在此,我添加了代码片段,以在关闭工作簿时删除数据验证列表:
如图所示,我已经使用VBA代码创建了具有有序和唯一值的数据验证列表,并将它们添加到A列的单元格中。
Source file
cwtwac6a5#
这就是我所做的修复它,我填写了我想在列表中的另一个工作表的一列,然后引用该工作表。我做了工作表名称,我引用了来自SheetName的列表(只需在这里输入你的工作表名称),A2:A19引用了引用工作表的那些单元格。如果需要,这也使编辑列表更容易。
dfddblmv6#
解决这个问题的最简单方法似乎是在退出工作簿之前删除验证: