2010-12-30 4 views
36

I haben eine Funktion, die Daten für 100 Zeilen erzeugt Zelle sagen (und 2 Spalten). Für jede Zeile (in der 3. Spalte) muß ich eine Schaltfläche hinzufügen, die beim Anklicken ein benutzerdefinierten modales Dialogfeld gibt den Anwender 4 Optionen/Tasten zur Auswahl bringt.Wie fügt man programmatisch in VBA neben einigen Sheet-Zellendaten eine Schaltfläche hinzu?

Irgendeine Idee, wie man das macht?

/T

+0

Checking: Sie wollen so etwas wie eine Liste/ComboBox in der dritten Spalte, aber modal? –

+0

beide belisarius und Remnant funktioniert – datatoo

Antwort

71

Ich denke, das ist genug, Sie auf einem schönen Weg zu bekommen:

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 

Es die Tasten erzeugt und bindet sich an butnS(). In dem Btns() Unter, sollten Sie Ihren Dialog zeigen, usw.

Mathematica graphics

+0

dies funktioniert, wenn Sie ‚Ziel‚t ändern‘und‚Tleft‘auf‚t.Left‘ – datatoo

+0

@datatoo Ja, danke. Korrigiert. –

+0

@belisarius +1 nette Antwort :) – Santosh

3

Angenommen, Ihre Funktion gibt Daten in den Spalten A und B, und Sie möchten, um eine benutzerdefinierte Userform angezeigt werden, wenn der Benutzer eine Zelle auswählt, in Spalte C. Eine Möglichkeit, dies zu tun, ist das SelectionChange Ereignis zu verwenden:

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 

Beachten Sie, dass die Userform wird angezeigt, wenn ein Benutzer wählt jede Zelle in Spalte C und man könnte jede Zelle in Spalte C auffüllen möchten mit etwas wie "Zelle zum Starten der Form auswählen", um das zu verdeutlichen muss der Benutzer eine Aktion (mit einer Taste schlägt natürlich, dass es angeklickt werden soll) auszuführen

+0

Ich mag die Idee! – tobefound

Verwandte Themen