【发布时间】:2018-11-01 01:42:47
【问题描述】:
我在删除一系列包含 ActiveX 命令按钮的单元格时遇到问题,因为下面的代码在调试时会在相交部分抛出错误 1004“应用程序定义或对象定义错误”。
Sub DeleteShapes()
Dim rng As Range
Dim sh As Shape
Set rng = Range("I7:K61")
With Sheets("ADB")
For Each sh In .Shapes
If Not Intersect(sh.TopLeftCell, .Range(rng)) Is Nothing Then
sh.Delete
End If
Next
End With
End Sub
工作表未锁定,我确保范围内的所有单元格也未锁定。也没有合并的单元格。我尝试了其他代码组合,但仍然导致错误 1004。代码在模块中。
奇怪的是,如果我添加代码来忽略错误,它会毫无问题地删除按钮。但是,出现了一个奇怪的问题,其中数据验证的下拉框在删除按钮后无法显示。它显示的唯一方法是保存工作簿。保存后删除按钮会导致下拉菜单再次消失。
有什么解决办法吗?
编辑:看起来我正在体验某种基于 VBasic2008 代码的类型为 8 的“幻影下拉”对象。我创建了一个新工作表并尝试复制一些旧工作表,然后它再次存在。 进一步的实验表明它来自我的数据验证单元格。然而奇怪的是,删除数据验证并不会删除下拉对象。清除整个工作表会导致对象仍然存在。我不得不删除工作表以摆脱它..
数据验证是否被视为表单控件?不应该……对吧?
编辑:我如何生成按钮
Public Sub GenerateButtons()
Dim i As Long
Dim shp As Object
Dim ILeft As Double
Dim dblTop As Double
Dim dblWidth As Double
Dim dblHeight As Double
Dim lrow As Long
lrow = Cells(Rows.count, 1).End(xlUp).Row
With Sheets("ADB")
ILeft = .Columns("I:I").Left
dblWidth = .Columns("I:I").Width
For i = 7 To lrow
dblHeight = .Rows(i).Height
dblTop = .Rows(i).Top
Set shp = .Buttons.Add(ILeft, dblTop, dblWidth, dblHeight)
shp.OnAction = "Copy1st"
shp.Characters.Text = "Copy " & .Cells(i, 6).Value
Next i
End With
End Sub
【问题讨论】:
-
请注意,
rng是 ActiveSheet 上的范围,不一定是 Sheeet("ADB") -
移动这一行:Set rng = .Range("I7:K61") 在这之后:With Sheets("ADB") and don不要忘记将点 (.) 放在 Range 对象之前,以确保在工作表中发生交集。
-
感谢您的意见 - 不幸的是,同样的问题仍然存在。错误显示在 sh.TopLeftCell 上。