对于我的问题,我想在非 NULL 或“”的单元格旁边创建一个按钮。按钮的标题必须跟在旁边单元格中的值之后。
例如:
- 我输入了“EMPLOYEE”
Range("D3")
- 我希望宏在
Range("C3")
- 但是我希望宏是动态的,这样每次我在“D”列中输入值时,左侧的单元格
C3
都会出现一个按钮。
因此,我发现我需要CommandButton
手动编码,对吗?
尽管如此,万提前感谢大家。
您可以通过添加命令按钮来记录宏以查看它是如何创建的,然后合并花哨的部分。注意 OLE 命令按钮对象的属性,多加注意。
例如,尚未通过etctheButton.Name
设置标题。theButton.Object.Caption
这是一个可以帮助您前进的代码片段:-
Option Explicit
Sub createButtons()
Dim theButton As OLEObject
Dim rngRange As Range
Dim i As Integer
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set rngRange = Sheets(2).Range("B2")
For i = 0 To 9
If rngRange.Offset(i, 0).Value <> "" Then
With rngRange.Offset(i, 1)
Set theButton = ActiveSheet.OLEObjects.Add _
(ClassType:="Forms.CommandButton.1", _
Left:=.Left, _
Top:=.Top, _
Height:=.Height, _
Width:=.Width)
theButton.Name = "cmd" & rngRange.Offset(i, 0).Value
theButton.Object.Caption = rngRange.Offset(i, 0).Value
'-- you may edit other properties such as word wrap, font etc..
End With
End If
Next i
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
输出:
试试这个。
Public Sub Worksheet_Change(ByVal Target As Range)
Dim col As Integer
Dim row As Integer
col = Target.Column
row = Target.row
If Not IsNull(Target.Value) And Not IsEmpty(Target.Value) Then
Application.EnableEvents = False
Buttons.Add Cells(row, col - 1).Left, Cells(row, col - 1).Top, Cells(row, col - 1).Width, Cells(row, col - 1).Height
Application.EnableEvents = True
End If
End Sub
打开 Developer Tab --> Visual Basic,双击“Sheet1”,然后将这段代码粘贴到那里。通过在 Sheet1 上的单元格中键入文本然后离开该单元格(例如按 Enter)来测试它。