2017-06-12 20 views
0

私はラベル、チェックボックス、テキストボックスからなるユーザーフォームを動的に生成しています。クリックするとテキストボックスの内容を選択することは可能ですか? これは私がテキストボックスを作成するために使用している方法である:クリック時のテキストボックスの内容を強調表示

Set NewTextBox = MainFrame.Controls.Add("Forms.TextBox.1") 
With NewTextBox 
    .Name = "QtyTB" & row 
    .Value = Cells(cellrow - 1 + row, 11) 
    .Height = 18 
    .Left = 210 
    .Top = 18 
    .Width = 36 
    .Enabled = True 
    .BackColor = RGB(255, 255, 0) 
End With 

私は手動でテキストボックスを作成することだった場合、私は特定のテキストボックスのon_clickサブを書くことができます。しかし、私が言ったように、コードはゼロからすべてを生成します。 プロパティやそれ以外の方法があれば、私は感謝しています。

答えて

0

はい、これは

...質問で上に行くために多くのコードが存在しないとして、次のコードは、適応のビットが必要になります

イベント処理でクラスモジュールを作成することによって行うことができますTextBoxEventHandler

ユーザーフォームのコードに続い
Private WithEvents FormTextBox As MSForms.TextBox 

Public Property Set TextBox(ByVal oTextBox As MSForms.TextBox) 
    Set FormTextBox = oTextBox 
End Property 

Private Sub FormTextBox_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) 
    If Button = 1 Then 
     With FormTextBox 
      .SelStart = 0 
      .SelLength = Len(.Text) 
     End With 
    End If 
End Sub 

と呼ばれるクラスモジュールに

Private CollectionOfEventHandlers As Collection 

Private Sub UserForm_Initialize() 
    Dim i As Long 
    Dim NewTextBox As MSForms.TextBox 

    For i = 0 To 4 
     Set NewTextBox = Me.Controls.Add("Forms.TextBox.1") 
     With NewTextBox 
      .Name = "QtyTB" & i ' Row 
      .Value = "Text " & i ' Cells(cellrow - 1 + Row, 11) 
      .Height = 18 
      .Left = 21 
      .Top = 18 + i * 25 
      .Width = 36 
      .Enabled = True 
      .BackColor = RGB(255, 255, 0) 
     End With 
    Next i 
    Call InitialiseHandlers 
End Sub 

Private Function InitialiseHandlers() 
    Set CollectionOfEventHandlers = New Collection 
    Dim FormControl As Control 
    For Each FormControl In Me.Controls 
     If TypeName(FormControl) = "TextBox" Then 
      Dim EventHandler As TextboxEventHandler 
      Set EventHandler = New TextboxEventHandler 
      Set EventHandler.TextBox = FormControl 
      CollectionOfEventHandlers.Add EventHandler 
     End If 
    Next FormControl 
End Function 
+0

おかげで多く、これは見事と非常に最小限のコードの適応で働いていました。チャンスはありますか?午後に私のコードを少し説明してください。それは動作しますが、私は方法を知らない:) –

関連する問題