【问题标题】:Excel VBA create a button beside cellExcel VBA 在单元格旁边创建一个按钮
【发布时间】:2012-12-21 16:47:03
【问题描述】:

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

例如:

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

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

尽管如此,在此先谢谢大家。

【问题讨论】:

  • First ... What have you tried? Second ... 查看Worksheet_Change 事件和Macro Recorder,同时手动执行您想要的操作。
  • 首先,我确实将按钮添加到 ActiveSheet 中,但对“Selection.OnAction =”一无所知,因为宏是我模块中的子项。
  • 你想让按钮做什么?
  • Selection.OnAction = 如果您想单击按钮并执行宏,这似乎与您提出的问题不同。你不需要任何按钮来创建按钮......除非我很困惑。
  • 是的,确实很抱歉造成混乱。我希望 worksheet_change() 在特定条件下为我创建 CommandButton。

标签: vba excel


【解决方案1】:

您可以通过添加命令按钮来录制宏,以查看它是如何创建的,然后合并花哨的部分。注意 OLE 命令按钮对象的属性,多加注意。

例如theButton.Name 尚未通过 theButton.Object.Caption 等设置标题。

这里有一段代码 sn-p 可以帮助您:-

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

输出:

【讨论】:

  • @Tan Siong Zhe 请试一试。想象一下,您将如何添加图片/图像,重命名,然后将其放置在单元格中:)
  • 感谢@bonCodigo 我现在正在尝试
  • 参考您的代码,我将每个“Sheets(2)”设置为“ActiveSheet”。有一个奇怪的问题是它成功创建了一个命令按钮,但同时弹出“运行时错误'438'”对象不支持此属性或方法。知道消息是如何存在的吗?
  • @TanSiongZhe 我应该更新这段代码。错误是由于theButton.Object.Name 而应该是theButton.Name :) 现在检查:) 请评论。
  • 请再次检查您的代码。按钮的坐标关闭。谢谢你。我现在也在努力。
【解决方案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)来测试它。

【讨论】:

  • 感谢@Sam 立即试用
  • @TanSiongZhe 抱歉,我只是注意到您特别想要一个命令按钮,而不是常规按钮。上述逻辑将保持不变,但您必须将“Buttons.Add”替换为 adding a commandbutton 的相应代码
  • 不要 :) 感谢您的链接。立即查看。
猜你喜欢
  • 1970-01-01
  • 2022-01-12
  • 1970-01-01
  • 1970-01-01
  • 2022-11-30
  • 2013-09-16
  • 1970-01-01
  • 2012-02-11
  • 1970-01-01
相关资源
最近更新 更多