我有一张工作表,在其中选择一个单元格,在该行上创建一个Activex组合框和一个删除按钮。
当用户按下删除按钮时,应该删除整行。
Rows(ActiveSheet.Shapes(Application.Caller).TopLeftCell.row).Delete
它可以有效删除ActiveX组合框以外的所有内容。 如何将其删除?
代码:
Dim cb as ComboBox
Set cb = ActiveSheet.OLEObjects.add(ClassType:="Forms.ComboBox.1", Link:=False, DisplayAsIcon:=False, Left:=Cells(cfgRows+1,1).Left, Top:=Cells(cfgRows+1,1)).Top, Width:=Cells(cfgRows+1,1).width, Height:=Cells(cfgRows+1,1).height).Object
cb.Name = cfgRows + 1
在网络上,我仅找到删除工作表中所有组合框的方法
答案 0 :(得分:0)
我知道这篇文章已经有一段时间了;另一方面,我想在其他人可能需要的情况下提供一些解决方法。
因此,由于可以在 OLEObjects 中找到 ComboBox,因此您可以通过创建时给它的名称找到它。
示例:如果您有“ComboBox99”名称,在字符串变量中,您可以使用:
Dim combo As Object
For Each combo In ActiveSheet.OLEObjects
If TypeName(combo.Object) = "ComboBox" Then
If combo.name = "ComboBox99" Then combo.delete
End If
Next
因此,第一步是转到普通模块并粘贴此脚本。并在空白表中使用它。这将生成:1 ComboBox、1 CommandButton 并在右侧打印 1 Text。 (但您可以增加 'for' 的 i 值,以防您想进行更多测试)
Sub CreateComboAndButton()
Dim combo As OLEObject, button As OLEObject
Dim c, a, t
With ActiveSheet
.rows.RowHeight = 20
'Augment 'i' to create more than one.
For i = 1 To 1
Set c = .Cells(i, 1):
a = c.row
Set combo = .OLEObjects.Add(ClassType:="Forms.ComboBox.1", _
Left:=c.Left, _
top:=c.top, _
width:=c.width, _
height:=c.height _
)
Set button = .OLEObjects.Add(ClassType:="Forms.CommandButton.1", _
Left:=c.width + 2, _
top:=c.top, _
width:=15, _
height:=c.height _
)
.Cells(i, 3) = "SomeTextInRow" & c.row '//Add some text
combo.name = "ComboBox_" & a
button.name = "CommandButton_" & a: button.Object.fontSize = 7: button.Object.Caption = "X"
Debug.Print (combo.name & " || " & button.name)
Next
End With
End Sub
最后,将下一个脚本粘贴到工作表本身,而不是模块中。
此脚本将首先迭代 OLEObjects 中的每个 Objects 以获取我们对象(即:ComboBox 和 CommandButton)的特定 TypeName将检查对象本身的名称并将其与:“ComboBox_1”(这是我们之前创建的组合的名称)进行比较,然后将其删除。它在第二个 'for' 中执行相同的操作,删除我们命名的 CommandButton 的名称:“CommandButton_1”。
提示: 使用 CommandButton 属性给定的行索引删除该行,因此我们始终可以删除对象所在的行,即使用户之前已经删除了一些行。
Private Sub CommandButton_1_Click()
Dim combo As Object, button As Object
On Error GoTo nameChanged:
Application.DisplayAlerts = False
myCombo = "ComboBox_1"
myButton = "CommandButton_1"
For Each combo In ActiveSheet.OLEObjects
If TypeName(combo.Object) = "ComboBox" Then
If combo.Name = myCombo Then combo.Delete
End If
Next
For Each Button In ActiveSheet.OLEObjects
Debug.Print (TypeName(Button.Object))
If TypeName(Button.Object) = "CommandButton" Then
If Button.Name = myButton Then
r = Button.TopLeftCell.Row
Button.Delete
End If
End If
Next
ActiveSheet.Rows(r).Delete
nameChanged:
Resume Next
End Sub
因此,要使此脚本起作用,请单击“X”按钮,以便可以删除整行。