Newsgroup: it.comp.appl.access
Titolo: [?] aggiungere valori a una combo box...

Volevo aggiungere valori ad una combo box da VBA con il metodo additem ma mi
dice che non lo trova. Qual'è la sintassi corretta?
Ad ogni modo se la combo è impostata su un origine SQL posso aggiungervi da
codice dei valori a mano?
grazie
--
<***********************************>
Vigna Federico...CED L'Abbondanza
Email: 
in...@labbondanza.it
Http: 
www.labbondanza.it
<***********************************>

 codice dei valori a mano?
No.
Per aggiungere valori, ad una combo basata su una query, quei valori devono
trovarsi nella query, quindi, al limite, li accodi alla tabella di
riferimento e fai un requery della combobox (nomecombo.requery).
Se la combo si basa su un elenco di valori, la sintassi è la seguente:
"valore1";"valore2";"....";"valoreN";
Quindi, se vuoi aggiungere un valore, scrivi:
nomecombo.RowSource = nomecombo.RowSource & "valorenuovo;"

 grazie
Invece che a mano anche con del codice VBA, ma non nella query che è origine
riga della combo, ma nella tabella che è dietro la query.
Roberto


Un metodo per aggiungere un valore alla lista di una combo box è la
seguente:
1- imposta come Origine riga della Combo box  una tabella
2- seleziona la proprietà Solo in elenco: si
3- nell'evento , Su non in elenco puoi aggiungere una apposita routine  che
permette di aggiungere , dopo la digitazione , il valore mancante alla lista
di origine se si tratta di un campo; altrimenti aprire un maschera per
inserire valori in più campi.
giuseppe

dice che non lo trova. Qual'è la sintassi corretta?
additem funziona con le combo di vb, quelle di access sono un'altra
cosa.
o le colleghi dritte per dritte ad una query, anche ad una stringa
sql, oppure prepari una stringa con i valori delimitati da punto e
virgola.
se devi fare spesso dei metti e leva ti conviene giostrarti questa
stringa.
--
make it idiot proof and someone will make a better idiot.
--
il sito comune di it.comp.appl.access:
http://members.xoom.it/it_db_access/


Nel caso possa servire a qualcuno.
Una soluzione interessante, nel caso la tua combo non e' legata ad una 
query e usi molto aggiungere e levare  item, consiste nel crearsi un nuovo 
oggetto tramite un modulo di classe.
Ti allego il codice prelevato da internet sotto.
Il modulo di classe  chiamalo come vuoi
per esempio myComboClass
Definisci a livello di modulo della maschera una variabile
oggetto:
dim varCombo as myComboClass
Sull'evento apertura della maschera:
Private Sub Form_Open(Cancel As Integer)
  Set varCombo = New myComboClass 
  Set varCombo.Control = Me!nomeCasellaCobinataDellaMaschera
.
.
.
End Sub
il primo set istanzia un nuovo oggetto della classe myComboClass
il secondo set fa in modo che la nuova variabile oggetto punti al controllo 
sulla maschera.(setta la proprieta' Control del nuovo oggetto)
Dopo di che puoi utilizzare i metodi che trovi nel codice allegato.
varCombo.AddItem
varCombo.RemoveItem
varCombo.Clear
varCombo.RemoveSelected
varCombo.Sort
Per metodi mancanti (che non modificano la combo) o utilizzi direttamente 
 Me!nomeCasellaCobinataDellaMaschera (non e' pero' corretto)
o aggiugi al modulo di classe i metodi e proprieta' che vuoi
clonandoli dal controllo originale.
Se a qualcuno interessano ulteriori informazioni posso provare a cercare la 
pagina internet relativa all'argomento, anche se la cosa migliore e' 
studiarsi il codice.
Sandro
'---------------------------------------------------
Option Compare Database
Option Explicit
Private mcolItems As Collection
Private mControl As Control
Private Sub Class_Initialize()
    Set mcolItems = New Collection
End Sub
Public Property Set Control(Control As Control)
  If (Not TypeOf Control Is ListBox) And _
     (Not TypeOf Control Is ComboBox) Then
    MsgBox "Please assign only list boxes or " & _
           "combo boxes to this property"
  Else
    Set mControl = Control
    mControl.RowSourceType = "Value List"
  End If
End Property
Public Sub AddItem(varItem As Variant)
    Dim varTest As Variant
    Dim bFound As Boolean
    Dim intCounter As Integer
 
    If Not IsNull(varItem) Then
      If InStr(varItem, ";") Then
        MsgBox "Item may not contain " & _
               "';' characters"
      Else
        For Each varTest In mcolItems
          If varTest = varItem Then
            bFound = True
          End If
        Next varTest
 
        If Not bFound Then
          mcolItems.Add varItem
          mControl.RowSource = _
            ConcatRowSourceStrings()
        End If
 
      End If
    End If
 
End Sub
Public Sub RemoveItem(intItem As Integer)
  Dim intRemoveItem As Integer
 
  'to emulate VB's RemoveItem method,
  'assume a zero-based index
  'rather than a 1-based index
  intRemoveItem = intItem + 1
 
  If intRemoveItem >= 1 And _
     intRemoveItem <= mcolItems.Count Then
    mcolItems.Remove intRemoveItem
    mControl.RowSource = ConcatRowSourceStrings()
  End If
 
End Sub
Private Function ConcatRowSourceStrings() As Variant
  Dim varItem As Variant
  Dim varResult As Variant
  For Each varItem In mcolItems
    varResult = varResult & varItem & ";"
  Next varItem
  If Len(varResult) Then
    varResult = Left(varResult, Len(varResult) - 1)
  End If
  ConcatRowSourceStrings = varResult
End Function
Public Sub Clear()
  Set mcolItems = Nothing
  Set mcolItems = New Collection
  mControl.RowSource = ""
End Sub
Public Sub RemoveSelected()
 
  Dim varCurItem As Variant
  Dim intCounter As Integer
 
  If TypeOf mControl Is ListBox Then
    If mControl.MultiSelect = 0 Then
      If mControl.ListIndex <> -1 Then
        RemoveFromCollection mControl.Value
      End If
 
    Else  '1=Simple, 2=Extended
      For Each varCurItem In mControl.ItemsSelected
        RemoveFromCollection _
          mControl.ItemData(varCurItem)
      Next varCurItem
 
    End If
 
    mControl.RowSource = ConcatRowSourceStrings()
  ElseIf TypeOf mControl Is ComboBox Then
    Me.RemoveItem mControl.ListIndex
  End If
 
End Sub
Public Sub Sort()
    Dim intCounter As Integer
 
    ReDim avaritems(1 To mcolItems.Count) _
          As Variant
 
    For intCounter = 1 To mcolItems.Count
      avaritems(intCounter) = _
      mcolItems.Item(intCounter)
    Next intCounter
 
    QSArray avaritems, 1, mcolItems.Count
 
    Set mcolItems = Nothing
    Set mcolItems = New Collection
 
    For intCounter = 1 To UBound(avaritems)
      mcolItems.Add avaritems(intCounter)
    Next intCounter
 
    mControl.RowSource = ConcatRowSourceStrings()
 
End Sub
Private Sub RemoveFromCollection( _
            varItem As Variant)
  Dim intCounter As Integer
 
  For intCounter = 1 To mcolItems.Count
    If mcolItems.Item(intCounter) = _
       varItem Then
      mcolItems.Remove intCounter
      Exit For
    End If
  Next intCounter
End Sub
Private Sub QSArray(arrIn() As Variant, _
  ByVal intLowBound As Integer, _
  ByVal intHighBound As Integer)
 
  Dim intX As Integer
  Dim intY As Integer
  Dim varMidBound As Variant
  Dim varTmp As Variant
  If intHighBound > intLowBound Then
    varMidBound = arrIn((intLowBound + _
                         intHighBound) \ 2)
    intX = intLowBound
    intY = intHighBound
 
    Do While intX <= intY
      If arrIn(intX) >= varMidBound And _
         arrIn(intY) <= varMidBound Then
        varTmp = arrIn(intX)
        arrIn(intX) = arrIn(intY)
        arrIn(intY) = varTmp
        intX = intX + 1
        intY = intY - 1
      Else
        If arrIn(intX) < varMidBound Then
          intX = intX + 1
        End If
        If arrIn(intY) > varMidBound Then
          intY = intY - 1
        End If
      End If
    Loop
 
    Call QSArray(arrIn(), intLowBound, intY)
    Call QSArray(arrIn(), intX, intHighBound)
  End If
End Sub


Però lo devi fare con prudenza .... altrimenti rischia di piantarsi tutto :-D

> Perň lo devi fare con prudenza .... altrimenti rischia di piantarsi tutto
:-D
Questo dimostra quanto hai capito bene quello che ho detto, no?
Caspita, se il mondo fosse pieno di gente come te... peccato perň che non
sia cosě, vero?


Già, invece  *fortunatamente* è zeppo di tipi come te.

 Già, invece  *fortunatamente* è zeppo di tipi come te.
Vedi? Siamo di nuovo a "Tu sei brutto!", "No, sei più brutto tu!". Non sai
fare di meglio?

fare di meglio?
In questo periodo no, è questione di bioritmi...
A settembre di solito risalgo su standard accettabili.