【发布时间】:2020-12-08 16:45:43
【问题描述】:
我有一个包含多个条目的日志。我在一行中输入了额外的数据,例如在单元格“G3”中。
如果输入的数据是有效日期,则会在该行的相邻单元格“J3”中创建一个按钮:
Public Sub Worksheet_Change(ByVal target As Range)
Dim intersection As Range
Dim RgBtn As Range
Dim Btn As Shape
Dim wS As Worksheet
Set intersection = Intersect(target, Columns(7))
Set wS = ThisWorkbook.Sheets("Log") 'Worksheet
If Not intersection Is Nothing Then
If IsDate(target.Value) Then
'MsgBox "Cell " & Target.Address(0, 0) & " contains a valid date."
'Add Button:
wS.Unprotect "DoNotChange!"
Set RgBtn = wS.Range("J" & target.row)
Set Btn = wS.Shapes.AddFormControl(xlButtonControl, RgBtn.Left, RgBtn.Top, RgBtn.Width, RgBtn.Height)
With Btn
.OnAction = "'CreateInvoice " & target.row & "'"
.OLEFormat.Object.Text = "Create Entry"
End With
Else
'MsgBox "Error..."
End If
End If
End Sub
当我单击该按钮时,该范围 (A3:F3) 中的数据将复制到另一张工作表中。
我希望,在单击该按钮后,该按钮被删除并替换为“已完成”文本。
我尝试了几种方法来删除该按钮。
【问题讨论】:
-
在 CreateInvoice 中,您可以使用
Application.Caller获取对按钮/形状的引用,以便将其删除 -
Activesheet.Shapes(Application.Caller).Delete -
这么简单!!!哦,伙计,有时……非常感谢蒂姆,这就像一个魅力!