删除行button删除其他行

我创build了几个macros,一个在确定的行中创build一个形状,并分配一个macros,并分配macros,当单击该形状时删除该行。 添加形状的macros由另一个macros激活,该macros用相关的数据填充表格的最后一行,删除相关的行,但是我将把它留下。

所以macros应该把这个形状添加到被填充的行中,一旦形状被点击,它就会得到形状的行并将其删除。

这里是macros:

– 创造形状的那个:

Sub addDelBt(ByVal Target As Range) Dim rw As Long rw = Target.Row Dim shp As Object Set shp = Plan1.Shapes.AddShape(msoShapeMathMultiply, Target.Left + 2.5, Target.Top + 2.5, Target.RowHeight - 2, Target.RowHeight - 2) 'shp.Width = 11 'shp.Height = 11 shp.Fill.ForeColor.RGB = RGB(192, 0, 0) shp.Fill.BackColor.RGB = RGB(170, 170, 170) shp.Line.Visible = msoFalse With shp.Shadow .ForeColor.RGB = RGB(0, 0, 128) .OffsetX = 0.5 .OffsetY = 2 .Transparency = 0.5 .Visible = True End With With shp.ThreeD .BevelTopType = msoBevelCircle .BevelTopInset = 15 .BevelTopDepth = 3 .PresetLighting = msoLightRigBalanced .LightAngle = 145 .Visible = True End With shp.Name = "btnDel" & rw shp.OnAction = "delRow" End Sub 

– 形状的动作:

 Sub delRow() Plan1.Unprotect ("password") Dim shp As Object Set shp = Plan1.Shapes(Application.Caller) Dim rw As Long rw = shp.TopLeftCell.Row Dim doc As String doc = Plan1.Cells(rw, 2).Value Dim msgResult As VbMsgBoxResult msgResult = MsgBox("Você deseja deletar o documento " + doc + "?", vbYesNo) If msgResult = vbYes Then Plan1.Rows(rw).EntireRow.Delete End If Plan1.Protect ("password") End Sub 

问题是有时(我还没有find一个模式)从一行的button将删除另一个上面的行。 我找不到原因,你能看到吗?

不明白为什么会发生这种情况。 代码一切看起来都不错。

一旦我也想做出非常类似的function,并意识到使用许多dynamic创build的button不是最好的select(至less不是我)。

我放弃了形状的想法,并与Worksheet_SelectionChange事件相似的function。 通过一些很好的格式化,你可以使列中的单元格看起来像一些删除button。 Worksheet_SelectionChange事件(对于单元格)像OnClick事件(对于形状的button/ OnAction )。

例:

 Private Sub Worksheet_SelectionChange(ByVal Target As Range) On Error GoTo ErrHandler Application.EnableEvents = False If Target.Column = 5 Then 'If the clicked cell is in the column 5 Dim doc As String doc = Cells(Target.row, 2).Value Dim msgResult As VbMsgBoxResult msgResult = MsgBox("Voce^ deseja deletar o documento " + doc + "?", vbYesNo) If msgResult = vbYes Then Plan1.Rows(Target.Row).EntireRow.Delete End If End If ErrHandler: Application.EnableEvents = True End Sub 

具有禁用事件的ErrorHandler对于防止row.delete事件触发另一个Worksheet_SelectionChange事件很重要。