我明白问题是什么,但我不知道如何解决它......
所以我正在做的是在我的工作表(“costing”)中单击一个按钮(addSceneButton),它将在按钮(addSceneButton)上方插入另一个工作表(“Scene Template”)的副本。它还将在先前插入的工作表的最右侧创建一个按钮 (deleteSceneButton)。
此按钮 (deleteSceneButton) 在单击时必须删除它旁边的区域。
如果我只添加 1 个场景就可以了。但是当我添加多个然后单击删除按钮时,它会自动删除最后插入的工作表。
当我想删除第二个时,它给了我“需要对象”错误。
一定是因为我覆盖了 delteButtonPos 而不是动态创建一个,但我不知道如何。
有人可以帮我吗?
这是我的代码
Public buttonPos As Range
Public deleteButtonPos As Range
Public deleteButton As Object
Private Sub AddSceneButton_Click()
Set buttonPos = Sheets(AddSceneButton.Parent.Name).Cells(AddSceneButton.TopLeftCell.Row - 1, _
AddSceneButton.TopLeftCell.Column)
Sheets("Scene Template").Activate
Sheets("Scene Template").Select
Sheets("Scene Template").Range("A1:H22").Select
Selection.Copy
Sheets("Costing").Select
buttonPos.Select
Selection.Insert Shift:=xlDown
'Insert the Add Scene Button
'Insert the Delete Button
Set deleteButtonPos = Selection.Range("H1")
Set deleteButton = ActiveSheet.Buttons.Add(deleteButtonPos.Left, _
deleteButtonPos.Top, _
deleteButtonPos.Width, _
deleteButtonPos.Height)
With deleteButton
.Caption = "Delete Button"
.Name = "deleteButtonFunct"
.OnAction = "Sheet1.deleteButtonFunct_Click"
End With
End Sub
Private Sub deleteButtonFunct_Click()
deleteButtonPos.Select
Range(Selection, Selection.End(xlDown)).Select
Selection.EntireRow.Delete
buttonPos.Select
End Sub
最佳答案
您的代码抛出所需对象的原因是它找不到按钮。因此,要纠正这一点,我们需要在第一次删除后再次设置按钮。
在这里,我添加了另外 3 个变量作为公共(public) introw, selnum, colnum
.
没有变化添加场景按钮 子部分。
我添加了一个额外的 查看重新设置按钮并正确设置行号和列号的功能。
在 内调用检查函数删除按钮功能 sub,以便每次单击删除按钮时,它都会删除复制的当前/最新行
到工作表并将新的删除按钮设置到最后一列。
如果 Row number is 1
,则无需设置额外的按钮,因此检查功能内部的条件。
我已经修改了你的代码。请找到更新后的代码。
Public buttonPos As Range
Public deleteButtonPos As Range
Public deleteButton As Object
Public introw, selnum, colnum As Integer
Private Sub AddSceneButton_Click()
Set buttonPos = Sheets(AddSceneButton.Parent.Name).Cells(AddSceneButton.TopLeftCell.Row - 1, _
AddSceneButton.TopLeftCell.Column)
Sheets("Scene Template").Activate
Sheets("Scene Template").Select
Sheets("Scene Template").Range("A1:H22").Select
Selection.Copy
Sheets("Costing").Select
buttonPos.Select
Selection.Insert Shift:=xlDown
'Insert the Add Scene Button
'Insert the Delete Button
Set deleteButtonPos = Selection.Range("H1")
Set deleteButton = ActiveSheet.Buttons.Add(deleteButtonPos.Left, _
deleteButtonPos.Top, _
deleteButtonPos.Width, _
deleteButtonPos.Height)
With deleteButton
.Caption = "Delete Button"
.Name = "deleteButtonFunct"
.OnAction = "Sheet1.deleteButtonFunct_Click"
End With
End Sub
Private Sub deleteButtonFunct_Click()
deleteButtonPos.Select
Range(Selection, Selection.End(xlDown)).Select
introw = Selection.Count
Selection.EntireRow.Delete
buttonPos.Select
Call check
End Sub
Function check()
rownum = ActiveCell.Row
colnum = ActiveCell.Column
selnum = rownum - introw
If (rownum > 1) Then
Cells(selnum, colnum).Select
Set deleteButtonPos = Selection.Range("H1")
Set deleteButton = ActiveSheet.Buttons.Add(deleteButtonPos.Left, _
deleteButtonPos.Top, _
deleteButtonPos.Width, _
deleteButtonPos.Height)
With deleteButton
.Caption = "Delete Button"
.Name = "deleteButtonFunct"
.OnAction = "Sheet1.deleteButtonFunct_Click"
End With
End If
End Function
该代码已经过测试并且工作正常。
希望这会有所帮助:)
关于vba - 删除项目 "Object required"excel VBA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30717131/