Excel VBA在单元格旁边创建一个按钮

时间:2012-12-21 16:47:03

标签: excel vba excel-vba

对于我的问题,我想在单元格旁边创建一个非NULL或“”的按钮。按钮的标题必须遵循旁边单元格中的值。

例如:

  1. 我在Range("D3")
  2. 中输入了'EMPLOYEE'
  3. 我希望宏在Range("C3")
  4. 中创建一个名为“EMPLOYEE”的按钮
  5. 但是我希望宏是动态的,这样每次我输入“D”列中的值时,左侧的单元格C3都会出现一个按钮。
  6. 因此,我已经发现我需要手动编写CommandButton代码才对吗?

    尽管如此,万人提前感谢所有人。

2 个答案:

答案 0 :(得分:3)

您可以录制宏,方法是添加命令按钮以查看其创建方式,然后合并花哨的部分。注意OLE Command按钮对象的属性,更加注意它们。

e.g。 theButton.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

输出:

enter image description here

答案 1 :(得分:2)

试试这个。

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

打开开发人员标签 - &gt; Visual Basic,双击&#34; Sheet1&#34;,然后将此代码粘贴到那里。通过在Sheet1上的单元格中键入文本然后远离该单元格来测试它(例如,按Enter键)。