2010-12-30 17 views
36

Tengo una función que genera datos para, por ejemplo, 100 filas de celdas (y 2 columnas). Para cada fila (en la tercera columna) necesito agregar un botón que, al hacer clic, abre un cuadro de diálogo modal personalizado que le da al usuario 4 opciones/botones para elegir.¿Cómo agregar un botón mediante programación en VBA junto a algunos datos de celda de hoja?

¿Alguna idea de cómo hacer esto?

/T

+0

Comprobación: ¿Desea algo como un List/ComboBox en la tercera columna, pero modal? –

+0

tanto belisarius como Remnant funcionarán – datatoo

Respuesta

71

creo que esto es suficiente para conseguir que en un camino agradable:

Sub a() 
    Dim btn As Button 
    Application.ScreenUpdating = False 
    ActiveSheet.Buttons.Delete 
    Dim t As Range 
    For i = 2 To 6 Step 2 
    Set t = ActiveSheet.Range(Cells(i, 3), Cells(i, 3)) 
    Set btn = ActiveSheet.Buttons.Add(t.Left, t.Top, t.Width, t.Height) 
    With btn 
     .OnAction = "btnS" 
     .Caption = "Btn " & i 
     .Name = "Btn" & i 
    End With 
    Next i 
    Application.ScreenUpdating = True 
End Sub 

Sub btnS() 
MsgBox Application.Caller 
End Sub 

Crea los botones y los ata a butnS(). En los btnS() sub, usted debe mostrar su diálogo, etc.

Mathematica graphics

+0

esto funciona si cambia 'objetivo a' t 'y' tLeft 'a' t.Left ' – datatoo

+0

@datatoo Sí, gracias. Corregido –

+0

@belisarius +1 buena respuesta :) – Santosh

3

Suponga que su función entra datos de las columnas A y B y que desea un formulario de usuario personalizada a aparecer si el usuario selecciona una celda en la columna C. Una forma de hacer esto es usar el evento SelectionChange:

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
    Dim clickRng As Range 
    Dim lastRow As Long 

    lastRow = Range("A1").End(xlDown).Row 
    Set clickRng = Range("C1:C" & lastRow) //Dynamically set cells that can be clicked based on data in column A 

    If Not Intersect(Target, clickRng) Is Nothing Then 
     MyUserForm.Show //Launch custom userform 
    End If 

End Sub 

Tenga en cuenta que el formulario de usuario aparecerá cuando un usuario selecciona cualquier celda de la columna C y es posible que desee rellenar cada celda en la columna C con algo como "seleccionar celda para iniciar formulario" para que sea obvio que el usuario necesita realizar una acción (tener un botón sugiere naturalmente que se debe hacer clic en él)

+0

¡Me gusta la idea! – tobefound

Cuestiones relacionadas