1

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

例如:

  1. 我输入了“EMPLOYEE”Range("D3")
  2. 我希望宏在Range("C3")
  3. 但是我希望宏是动态的,这样每次我在“D”列中输入值时,左侧的单元格C3都会出现一个按钮。

因此,我发现我需要CommandButton手动编码,对吗?

尽管如此,万提前感谢大家。

4

2 回答 2

3

您可以通过添加命令按钮来记录宏以查看它是如何创建的,然后合并花哨的部分。注意 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

输出:

在此处输入图像描述

于 2012-12-21T19:37:34.550 回答
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

打开 Developer Tab --> Visual Basic,双击“Sheet1”,然后将这段代码粘贴到那里。通过在 Sheet1 上的单元格中键入文本然后离开该单元格(例如按 Enter)来测试它。

于 2012-12-21T19:50:45.283 回答