2015-07-02 32 views
5

Lo scenario: Ho provato a utilizzare questo codice per creare una proprietà OpenArgs alternativa in base al suggerimento di Rubberduck, ma non riesco a farlo funzionare. Immagino che mi manchi qualcosa qui, ma non ho idea di cosa.Passaggio di OpenArgs alternativo ai moduli di accesso creati con 'Nuovo'

Il Codice:

Public varAltOpenArgs As Variant 
Dim FormX as form 

Public Property Let AltOpenArgs(value As Variant) 
    varAltOpenArgs = value 
End Property 

Public Property Get AltOpenArgs() As Variant 
    AltOpenArgs = varAltOpenArgs 
End Property 

Una nuova istanza del modulo viene aperto da questo modulo (form1) utilizzando:

Set frmX = New 
frmX.AltOpenArgs = "abcde" 
frmX.SetFocus 

Il problema: La proprietà AltOpenArgs contiene un vuoto string ("") quando chiamato in Form_Open.

Qualcuno può indicarmi la giusta direzione? Sto usando Access 2010 (32).

risposta

1

Il problema è che tutti gli eventi si attivano non appena si crea la nuova istanza (Set frmX = New Form_MyExampleForm) prima dell'esecuzione della prossima riga di codice in cui si imposta il valore di AltOpenArgs.

Questo non funzionerà mai perché i moduli di accesso vengono creati per essere istanziati dall'applicazione e non si ha realmente il controllo sugli eventi. Se proprio non è possibile utilizzare il costruito nel OpenArgs, allora si potrebbe fare qualcosa di simile in cui si esegue una routine dalla Property Let:

Public Property Let AltOpenArgs(value As Variant) 
    varAltOpenArgs = value 
    FancyRoutine 
End Property 

Private Sub FancyRoutine() 
    'Do whatever fancy stuff you want to do 
    MsgBox AltOpenArgs 
End Sub 

faccio qualcosa sulla falsariga di ciò che si sta cercando (anche se non utilizzando l'evento Form_Open) per le sottomaschere. Potrebbe essere il seguente:

Dim frm As Form_MyExampleForm 
Me.SubformControl.SourceObject = "MyExampleForm" 
Set frm = MainSubform.Form 
frm.AltOpenArgs = "whatever you want" 
+0

Ciao Don. Grazie per la tua risposta. Per essere più specifici (OK, avrei dovuto fornire maggiori informazioni dall'inizio) Non posso usare il comando OpenForm perché sto riutilizzando lo stesso modulo (multiistanza) Imposta Form2 come Nuovo Form_Form1 non funzionerà. Ma come soluzione temporanea ora utilizzo TempVars! [AltOpenArgs] e questo funziona davvero bene per me. – Art