我在excel中有一个包含资产标签的列表。我有2列(F和G)。在G中是实际的资产标签。在F中,我想在每一行上创建一个按钮,使用G列旁边单元格中的数据执行宏
列的示例:
我有一些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
这是按钮创建的屏幕截图:
答案 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列中的单元格,然后单击单个按钮。