Newsgroup: it.comp.lang.visual-basic
Titolo: VBA - Metodo Add per un Form

Aiuto ! Ho un problema semplice semplice, ma...troppo complicato per me:
in un form voglio che all'evento Activate vengano aggiunte un certo numero
di text box (il numero di text box da aggiungere puo variare in funzione di
vari parametri)
fino a qui riesco ad aggiungere (per esempio) 20 text box con il seguente
codice:
Dim prova As Control
For i = 1 To 20
Set prova = Controls.Add("Forms.TextBox.1", Visible)
prova.Left = 18
    prova.Top = 5 + i * 12
    prova.Width = 80
    prova.Height = 10
Next i
A questo punto inizia il mio problema:
come faccio adesso a gestire queste benedette 20 TextBox ????
Per capirci meglio, come faccio ad aggiungere alle textbox del testo, o a
cambiarne il colore, o a distinguere la prima dalla quinta o dalla
dodicesima ???
Ad esempio,con che codice posso  fare in modo che in ognuna delle 20 text
box compaia un testo che si trova nel range (a1:a20) del foglio "xy" ?
Vi chiedo una mano.
Grazie
Chris

 box compaia un testo che si trova nel range (a1:a20) del foglio "xy" ?
Ti propongo un esempio. Se hai bisogno di delucidazioni domanda pure.
(Attenzione: ho rinominato il progetto: "PArrayControlli" e ho salvato la
cartella di lavoro col nome "Cartel1.XLS")
Modulo1:
Option Explicit
Sub Test()
  Const c_sWbkName  As String = "Cartel1.XLS"
  Const c_sWksName  As String = "Foglio1"
  Const c_sRngAddr  As String = "A1:A20"
  Dim oXLWks    As Excel.Worksheet
  Dim oUserForm As PArrayControlli.UserForm1
  Set oXLWks = Workbooks(c_sWbkName).Worksheets(c_sWksName)
  Set oUserForm = New PArrayControlli.UserForm1
  With oUserForm
    Set .InputRange = oXLWks.Range(c_sRngAddr)
    If .Done Then
      .Show
    Else
      MsgBox "Qualcosa e' andato storto!"
    End If
  End With
  Set oUserForm = Nothing
  Set oXLWks = Nothing
End Sub
UserForm1:
Option Explicit
Private Const mc_sName As String = "Text"
Private m_bDone       As Boolean
Private m_oInputRange As Excel.Range
Private Function AddControls( _
) As Boolean
  On Error GoTo ErrH
  Const c_sProgID   As String = "Forms.TextBox.1"
  Const c_fLeft     As Single = 18
  Const c_fTop      As Single = 5
  Const c_fWidth    As Single = 80
  Const c_fHOffset  As Single = 3
  Dim oXLRng    As Excel.Range
  Dim oTextBox  As MSForms.TextBox
  Dim lIndex    As Long
  Dim fTop      As Single
  fTop = c_fTop
  With Me
    For Each oXLRng In m_oInputRange
      Set oTextBox _
        = .Controls.Add( _
              c_sProgID _
            , mc_sName & CStr(lIndex + 1) _
            , True)
      With oTextBox
        .Left = c_fLeft
        .Top = fTop
        .Width = c_fWidth
        fTop = fTop + .Height + c_fHOffset
        .ControlSource _
          = oXLRng.Address
        .TextAlign = fmTextAlignRight
      End With
    Next
    .Height = (.Height - .InsideHeight) + fTop
    .Controls(mc_sName & "1").SetFocus
  End With
  AddControls = True
Ext:
  Set oTextBox = Nothing
  Set oXLRng = Nothing
  Exit Function
ErrH:
  Resume Ext
End Function
Public Property Get Done() As Boolean
  Done = m_bDone
End Property
Public Property Get InputRange( _
) As Excel.Range
  Set InputRange = m_oInputRange
End Property
Public Property Set InputRange( _
  ByVal NewValue As Excel.Range)
  Set m_oInputRange = NewValue
  m_bDone = AddControls
End Property
Private Sub CommandButton1_Click()
  '
End Sub
'
' Scritta solo a scopo debug.
'
Private Sub UserForm_AddControl( _
  ByVal Control As MSForms.Control)
  Dim oTextBox As MSForms.TextBox
  If TypeName(Control) = "TextBox" Then
    Set oTextBox = Control
    With oTextBox
      Debug.Print .Name
    End With
  End If
End Sub
Private Sub UserForm_Initialize()
  Debug.Print "UserForm_Initialize"
End Sub
Private Sub UserForm_Terminate()
  Set m_oInputRange = Nothing
  Debug.Print "UserForm_Terminate"
End Sub
--
Ciao.
Maurizio
--------
?SPQR(C)
 X
--------