如何创建宏:让按钮使用单元格值

时间:2017-05-19 18:12:51

标签: excel excel-vba command vba

我在excel中有一个包含资产标签的列表。我有2列(F和G)。在G中是实际的资产标签。在F中,我想在每一行上创建一个按钮,使用G列旁边单元格中的数据执行宏

列的示例:

Example of Columns

我有一些VBA代码可以使用G列中的资产标记启动vncviewer.exe。这是一段很好的代码:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Application.Intersect(Target, Range("G:G")) Is Nothing Then
       'Call Shell("c:\progra~1\realvnc\vncvie~1\vncviewer.exe " & Target.Value)
    Call Shell("c:\progra~1\realvnc\vncvie~1\vncviewer.exe " & Target.Value)
End If
End Sub

但您必须双击G列中的单元格才能在单元格中输入数据,然后按Enter或Tab键退出。这会成功激活vncviewer。

我希望宏能够接管这个双击并退出我点击的按钮旁边的单元格。

下面的(录制的)宏看起来像我想做的那样(除了只进入G2,复制到位并退出到H2),但我不知道如何制作它以便我可以制作一个单独的按钮F列中的每一行对应G

中旁边的资产标签
Sub Macro2()
'
' Macro2 Macro
'

'
    Range("G2").Select
    Selection.Copy
    ActiveSheet.Paste
    Range("H2").Select
End Sub

这是按钮创建的屏幕截图:

This is a screenshot of the button creation

2 个答案:

答案 0 :(得分:0)

不清楚你之后会发生什么,但这可能会让你失望

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Application.Intersect(Target, Range("G:G")) Is Nothing Then

    If Target.Count > 1 Then Exit Sub

    Dim b As Button

    Call Shell("c:\progra~1\realvnc\vncvie~1\vncviewer.exe " & Target.Value)

    Application.ScreenUpdating = False

    Set b = ActiveSheet.Buttons.Add(Target.Offset(, -1).Left, Target.Top, Target.Width, Target.Height)
    With b
        '.OnAction = "btnS"
        .Caption = "Btn " & target.row
        .Name = "Btn" & target.row
    End With

    Application.ScreenUpdating = True

End If

End Sub

答案 1 :(得分:0)

据我所知,你的专栏G只是一个清单。您不一定要在更改列表时调用VNCViewer,而是希望用户能够选择其中一个值,然后单击按钮以使VNCViewer使用其值。

如果是这样,试试这个(假设你的按钮链接到Macro2子程序):

Sub Macro2()
    If Selection.Column = 7 Then
        Shell "c:\progra~1\realvnc\vncvie~1\vncviewer.exe " & Selection.Value
    End If
End Sub

并删除您的Worksheet_Change代码。

然后,用户可以通过单击选择G列中的单元格,然后单击单个按钮。