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

Excel VBA在单元格旁边创建一个按钮,vba,excel,Vba,Excel,对于我的问题,我想在单元格旁边创建一个不为NULL或“”的按钮。按钮的标题必须跟在旁边单元格中的值后面 例如: 我在范围(“D3”) 我希望宏在范围(“C3”) 但是,我希望宏是动态的,这样每当我在列“D”中键入值时,左侧的单元格-C3将弹出一个按钮 因此,我发现我需要手动为CommandButton编码,对吗 尽管如此,还是要提前向大家表示感谢。您可以通过添加一个命令按钮来录制宏,查看宏是如何创建的,然后合并这些奇特的部分。请注意OLE命令按钮对象的属性,请注意它们 e、 g.theButto

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

例如:

  • 我在
    范围(“D3”)
  • 我希望宏在
    范围(“C3”)
  • 但是,我希望宏是动态的,这样每当我在列“D”中键入值时,左侧的单元格-
    C3
    将弹出一个按钮
  • 因此,我发现我需要手动为
    CommandButton
    编码,对吗


    尽管如此,还是要提前向大家表示感谢。

    您可以通过添加一个命令按钮来录制宏,查看宏是如何创建的,然后合并这些奇特的部分。请注意OLE命令按钮对象的属性,请注意它们

    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
    
    选项显式
    子创建按钮()
    将按钮调暗为一个对象
    暗格兰奇山脉
    作为整数的Dim i
    Application.ScreenUpdating=False
    Application.DisplayAlerts=False
    设置rngRange=图纸(2)。范围(“B2”)
    对于i=0到9
    如果rngRange.Offset(i,0).Value为“”,则
    带rngRange.Offset(i,1)
    设置按钮=ActiveSheet.OLEObjects.Add_
    (类类型:=“Forms.CommandButton.1”_
    左:=.左_
    Top:=.Top_
    高度:=。高度_
    宽度:=。宽度)
    theButton.Name=“cmd”&rngRange.Offset(i,0).Value
    theButton.Object.Caption=rngRange.Offset(i,0).Value
    “--您可以编辑其他属性,如换行符、字体等。。
    以
    如果结束
    接下来我
    Application.ScreenUpdating=True
    Application.DisplayAlerts=True
    端接头
    
    输出:


    您可以通过添加一个命令按钮来录制宏,查看宏是如何创建的,然后合并这些奇特的部分。请注意OLE命令按钮对象的属性,请注意它们

    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
    
    选项显式
    子创建按钮()
    将按钮调暗为一个对象
    暗格兰奇山脉
    作为整数的Dim i
    Application.ScreenUpdating=False
    Application.DisplayAlerts=False
    设置rngRange=图纸(2)。范围(“B2”)
    对于i=0到9
    如果rngRange.Offset(i,0).Value为“”,则
    带rngRange.Offset(i,1)
    设置按钮=ActiveSheet.OLEObjects.Add_
    (类类型:=“Forms.CommandButton.1”_
    左:=.左_
    Top:=.Top_
    高度:=。高度_
    宽度:=。宽度)
    theButton.Name=“cmd”&rngRange.Offset(i,0).Value
    theButton.Object.Caption=rngRange.Offset(i,0).Value
    “--您可以编辑其他属性,如换行符、字体等。。
    以
    如果结束
    接下来我
    Application.ScreenUpdating=True
    Application.DisplayAlerts=True
    端接头
    
    输出:

    试试这个

    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
    
    打开开发人员选项卡-->Visual Basic,双击“Sheet1”,然后将此代码粘贴到其中。通过在Sheet1上的单元格中键入文本,然后离开该单元格(例如按Enter键)进行测试。

    尝试此操作

    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
    


    打开开发人员选项卡-->Visual Basic,双击“Sheet1”,然后将此代码粘贴到其中。通过在Sheet1上的单元格中键入文本,然后离开该单元格(例如按Enter键)进行测试。

    首先。。。第二手动执行所需操作时,请参见工作表更改事件和宏记录器。首先,我确实在活动表中添加了按钮,但没有关于“Selection.OnAction=”的任何线索,因为宏是我模块中的一个子模块。您希望该按钮做什么?
    Selection.OnAction=
    如果您希望单击按钮并执行宏,这似乎与您提出的问题不同。您不需要任何按钮来创建按钮。。。除非我感到困惑。是的,真的很抱歉困惑。我希望工作表_change()在特定条件下为我创建CommandButton。首先。。。第二手动执行所需操作时,请参见工作表更改事件和宏记录器。首先,我确实在活动表中添加了按钮,但没有关于“Selection.OnAction=”的任何线索,因为宏是我模块中的一个子模块。您希望该按钮做什么?
    Selection.OnAction=
    如果您希望单击按钮并执行宏,这似乎与您提出的问题不同。您不需要任何按钮来创建按钮。。。除非我感到困惑。是的,真的很抱歉困惑。我想让工作表_change()在一定条件下为我创建CommandButton。@谭良哲,请试一试。想象一下你想如何添加图片/图像,重命名它,然后将其放置在单元格中:)谢谢@bonCodigo我现在正在尝试参考你的代码,我将每个“工作表(2)”设置为“活动工作表”。有一个奇怪的问题,它成功地创建了CommandButton,但同时弹出“运行时错误'438'”对象不支持此属性或方法。知道消息是怎么存在的吗?@tansinogzhe我应该更新这个代码。错误是由于按钮.Object.Name应该在哪里出现的按钮.Name:)立即检查:)请评论。请再次检查您的代码。按钮的坐标已关闭。非常感谢。“我现在也在做呢。”谭良哲请你试试。想象一下,你想如何添加图片/图像,重命名它,然后将其放置在单元格中:)谢谢@bonCodigo我正在尝试nowRef