vba - 删除项目 "Object required"excel VBA

标签 vba excel dynamic

我明白问题是什么,但我不知道如何解决它......
所以我正在做的是在我的工作表(“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/

相关文章:

excel - 如何测试范围是否为空?

Excel 多个 If 语句显示 False

ASP.NET:如何访问动态创建的控件

json - json 的 Swift json 动态 key 解析

Excel VBA 在数字字符串中添加零

excel - VBA 列的最后一行

vba - 如何在使用 sleep 时阻止 Excel 变得无响应

excel - 使用 ADO VBA 将 Excel 字段插入 Access 表

c++ - 在类构造函数中动态定义堆栈,它是私有(private)成员

vba - 如何让vba每10分钟执行一次?