原始问题

原始问题

谢谢雷斯塔法里安我在退出之前将工作簿中剩余的数据验证残留框全部删除,以清除所有残留的数据验证残留框。

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

天哪!我昨天正为此苦苦挣扎!我在网上找不到任何相关信息。

在此处输入图片描述

在此处输入图片描述

我的解决方案是使用 VBE 中的立即窗口(Alt+F11然后ctrl+ G)来查看页面上的内容,因此我在模块中运行了类似这样的操作 -

Sub test()
Dim shp As Shape
For Each shp In ActiveSheet.Shapes
    Debug.Print shp.Name
Next
End Sub

它打印了我页面上的所有形状。然后我在即时窗口中发现了错误的下拉菜单。所以我在即时窗口中输入了以下内容 -

 activesheet.shapes("Drop Down 8").delete

只需使用您的形状名称。

答案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

相关内容