2013-05-02 14 views
6

Quello che sto cercando di ottenere è una selezione di una casella combinata (Combo_sf) per dettare il modulo nel controllo della sottomaschera (sf_record). Ho circa 10 moduli, i loro nomi sono nei dati della casella combinata. Sono nuovo di VBA e non sono sicuro se il mio approccio è giusto:Sottomaschera di accesso Oggetto di origine

Private Sub Combo_sf_AfterUpdate() 
    Dim strLoadTable As String 

    strLoadTable = "Form." & Me.Combo_sf.Value 
    MsgBox strLoadTable 

    Forms![frm_Mnu_Manage Configuration Settings]!sf_record.Form.SourceObject = strLoadTable 

End Sub 

ho messo questo evento dopo l'aggiornamento del combobox, ma quando faccio mia selezione non succede niente in forma. Mi sto avvicinando a questo diritto o un altro modo funzionerebbe meglio?

risposta

5

L'approccio deve essere attivo. Ho messo una casella combinata denominata cbxSubform sulla mia forma principale e ha aggiunto una riga di codice al suo gestore di eventi AfterUpdate() ...

Private Sub cbxSubform_AfterUpdate() 
Me.mySubform.SourceObject = Me.cbxSubform.Value 
End Sub 

... e cambiando la selezione nella casella combinata passa immediatamente subforms. Sei sicuro che il codice AfterUpdate() per la tua casella combinata sia effettivamente attivo? (Si potrebbe aggiungere un MsgBox o un Debug.Print per controllare.)

+1

Grazie, penso che il problema dei miei macro non è stato attivato, ma questa informazione è stata di grande aiuto grazie per tutto il vostro aiuto! – Bawn

4

Potrebbe essere questa linea, che si è inciampare:

strLoadTable = "Form." & Me.Combo_sf.Value 

Qual è il tuo oggetto form chiamato? Se il tuo modulo è chiamato Form.myTableName potrebbe essere lo . che lo sta buttando fuori, prova a impostarlo su un modulo senza un punto nel suo nome.

4

In questa riga, sembra che il codice tenti di modificare la proprietà SourceObject di un oggetto Form.

Forms![frm_Mnu_Manage Configuration Settings]!sf_record.Form.SourceObject = strLoadTable 

Tuttavia, SourceObject è una struttura di una sottomaschera controllo, non la forma contenuta in tale controllo. Quindi, se il controllo della sottomaschera è denominato sf_record, farlo in questo modo.

Forms![frm_Mnu_Manage Configuration Settings]!sf_record.SourceObject = strLoadTable 

Inoltre, se la procedura dopo l'aggiornamento va da [frm_Mnu_Manage Configuration Settings], è possibile utilizzare Me per fare riferimento al modulo.

Me!sf_record.SourceObject = strLoadTable 

Infine, se Me.Combo_sf.Value è il nome di un modulo, non è necessario anteporre il suo nome con "forma".. Ha funzionato in entrambi i modi nel mio test, ma vorrei semplicemente lasciare "Form"..

strLoadTable = Me.Combo_sf.Value