Cómo crear una macro: permite que un button use un valor de celda

Tengo una list con tags de activos en Excel. Tengo 2 columnas (F y G). En G son las tags de activos reales. En FI, le gustaría crear un button en cada fila que ejecuta una macro usando los datos en la celda contigua en la columna G

Ejemplo de columnas:

Ejemplo de columnas

Tengo un poco de código VBA que inicia vncviewer.exe con la label de activo en la columna G. Es un buen código:

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 

Pero debe hacer doble clic en la celda de la columna G para ingresar los datos en la celda y luego presionar Enter o Tab para salir. Esto activa el vncviewer con éxito.

Me gustaría que la macro se haga cargo de este doble clic y salir de la celda junto al button en el que hago clic.

La macro (grabada) a continuación parece hacer lo que quiero (excepto que solo ingrese G2, copie pegar en su lugar y salga a H2), pero no tengo idea de cómo hacerlo para poder hacer un button individual en cada fila en Columna F correspondiente a la label del activo al lado en G

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

Esta es una captura de pantalla de la creación del button:

Esta es una captura de pantalla de la creación del botón

Por lo que puedo entender, tu columna G es solo una list. No necesariamente desea invocar VNCViewer cuando se cambia la list, sino que desea que el usuario pueda seleccionar uno de esos valores y luego hacer clic en un button para que VNCViewer use su valor.

Si es así, intente esto (suponiendo que su button esté vinculado a la subrutina Macro2 ):

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

y elimine su código de Worksheet_Change trabajo_Cambiar.

El usuario podrá simplemente seleccionar una celda en la columna G haciendo clic en ella, luego hacer clic en el button individual.

No está claro qué es lo que buscas, pero esto podría comenzar.

 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 
    Intereting Posts