我目前正在为公司其他人使用excel模板。 我需要用一个按钮删除行。 我相信我已经完成了所有事情,但我一直都会遇到错误。
在下方,您可以看到出错的代码;
Worksheets("Storyboard").Activate
Worksheets("Storyboard").Unprotect Password:="**$#B'A1313XQ.;**"
satirlar = Baslangic & ":" & Bitis
For i = Baslangic To Bitis
Dim s As Shape
For Each s In Worksheets("Storyboard").Shapes
If Not Intersect(s.TopLeftCell, Range("L" & Baslangic & ":" & "L" & Bitis)) Is Nothing Then
s.Delete
End If
Next s
Next i
Rows(satirlar).Delete Shift:=xlUp
我一直在" s.topleftcell"部分。它表示"应用程序定义的错误或对象定义错误"。
关于此代码; " Baslangic"和" Bitis"使用表单预定义。
我可以在这里使用任何可能的建议..
答案 0 :(得分:2)
数据验证(DV)下拉列表是一种形状,但DV下拉列表没有TopLeftCell
属性。您可以做的是循环遍历DrawingObjects
:
For i = Baslangic To Bitis
Dim s As Object
For Each s In Worksheets("Storyboard").DrawingObjects
If Not Intersect(s.TopLeftCell, Range("L" & Baslangic & ":" & "L" & Bitis)) Is Nothing Then
s.Delete
End If
Next s
Next i
答案 1 :(得分:0)
实际上,尝试这样的事情:
Sub TestMe()
Dim myShape As Shape
For Each myShape In ActiveSheet.Shapes
Debug.Print myShape.TopLeftCell.Address(0, 0)
Debug.Print myShape.TopLeftCell.row
Next myShape
End Sub
这是使用topLeftCell的好方法。您甚至可以明确地比较行,并使您的代码没有Intersect()
。
类似于if myShape.TopLeftCell.row >Baslangic
或类似的东西。
如果您将代码改为
,则可能有效。If Not Intersect(s.TopLeftCell, Worksheets("Storyboard").Range("L" & Baslangic & ":" & "L" & Bitis)) Is Nothing Then