谢谢雷斯塔法里安我在退出之前将工作簿中剩余的数据验证残留框全部删除,以清除所有残留的数据验证残留框。
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.ScreenUpdating = False
'Delete all drop down lists
For Each ws In ActiveWorkbook.Worksheets
For Each shp In ws.Shapes
If shp.Name Like "Drop Down *" Then
shp.Delete
End If
Next shp
Next ws
Sheet1.Activate
Application.ScreenUpdating = True
End Sub
=================
原始问题
我在使用 Excel VBA 时遇到了一个烦人的错误。请看此屏幕截图。我使用 Excel 工作表作为用户输入表单。在表单上,我有几个地方放置了数据验证。用户按下 Enter 键后,我使用这段代码清除表单。
For Each a In Sheets("frmBienNhan").Range("C5:K31")
If a.Locked = False Then
a.Value = ""
End If
Next a
代码运行几次后,这些该死的箭头就出现了。它就像数据验证的下拉列表,但是当你点击它时,列表是空的。我无法选择它后面的单元格。即使我在 Excel 中使用清除所有验证或清除所有命令,也无法将其删除。这不是什么大问题,但它对用户来说很烦人,因为他们必须使用键盘将光标移动到该单元格,否则他们无法选择真正的数据验证下拉列表。
非常欢迎任何关于这个错误的想法或经验。
答案1
答案2
尝试将 a.Value 设置为vbNullString
而不是 ""。在 VBA 中,将字符串设置为 "" 会为 char[0] 数组分配内存,该数组包含字符串常量(如终止符)。vbNullString
返回指向 null 的指针,因此它确实是空的。
https://movefirstblog.wordpress.com/2008/06/28/vbnullstring-empty-cells-in-excel-vba/
答案3
这是我在 Worksheet_BeforeSave 处理程序中放置的内容。概念是下拉列表来自验证,出于某些奇怪的原因,Excel 有时会留下其中一些。
' Clear off lingering dropdowns
Dim aShape As Shape
Dim aWorksheet As Worksheet
For Each aWorksheet in Me.Sheets
For Each aShape In aWorksheet.Shapes
If aShape.Type = msoFormControl Then
If aShape.FormControlType = xlDropDown Then
aShape.Delete
End If
End If
Next
Next