2010-12-30 8 views
36

私は100のセル行(と2つの列)のデータを生成する関数を持っています。各行(3列目)には、クリックするとカスタムモーダルダイアログボックスが表示されるボタンを追加する必要があります。このダイアログボックスでは、4つのオプション/ボタンを選択できます。シートセルのデータの横にVBAでプログラムでボタンを追加する方法はありますか?

どうすればいいですか?

/T

+0

チェック:3番目の列にはList/ComboBoxのようなものが必要ですが、モーダルですか? –

+0

belisariusとRemnantの両方が動作します – datatoo

答えて

71

私は、これは素敵な道にあなたを取得するのに十分であると思う:

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 

それは、ボタンを作成し、butnSにそれらを結合し()。 btnS()サブでは、あなたのダイアログが表示されるはず、など

Mathematica graphics

+0

'targetを' t 'に変更し、' tLeft 'を' t.Left 'に変更すると動作します – datatoo

+0

@datatooはい、ありがとうございます。修正されました。 –

+0

@belisarius +1素敵な答え:) – Santosh

3

あなたの関数は、列AとBにデータを入力し、ユーザーがセルを選択した場合に表示されるように、カスタムユーザーフォームにしたいと仮定ユーザーが列Cに任意のセルを選択し、あなたが列Cの各セルを移入することがあります時にユーザーフォームが表示されること

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 

注:これを行うには、列C.一つの方法は、SelectionChangeイベントを使用することです「フォームを起動するセルを選択する」のようなもので、それを明白にするユーザーはアクションを実行する必要があります(ボタンをクリックすると自然にクリックする必要があります)

+0

私はアイデアが好きです! – tobefound

関連する問題