PDA

View Full Version : [ACCESS - VBA] Maschere con Multi Interruttore


ivan.ti
12-08-2010, 20:05
Buonasera a Tutti...

Sono giorni che mi cimento nella creazione di un database e dopo aver risolto alcuni problemi (non banali per uno che sa poco di programmazione) sono arrivato ad un punto morto.
Il problema riguarda l'utilizzo degli interruttori in una maschera. Mi spiego meglio:

Ho inserito in una maschera 5 interruttori per attivare le 5 maschere collegate, utilizzando la procedura Parent-Child, copiata dal Wizard e successivamente riadattata per le multi-maschere.
Ho scritto lo stesso codice per ogni tanto modificando i vari nomi necessari (NomeInterruttore, NomeMaschera, ecc) ma qui esce il problema.
Due maschere in particolare rimangono sempre su attivate, cioè l'interruttore rimane sempre premuto anche al secondo click che dovrebbe disattivarlo e chiudere la maschera. Il problema però succede solo a 2 di questi 5 interruttori-maschere.

Cosa devo fare?

Qui c'è una parte di codice della maschera principale:
Option Compare Database

Sub Form_Current()
On Error GoTo Form_Current_Err

If ChildFormIsOpen() Then FilterChildForm
If Child1FormIsOpen() Then FilterChild1Form
If Child2FormIsOpen() Then FilterChild2Form
If Child3FormIsOpen() Then FilterChild3Form
If Child4FormIsOpen() Then FilterChild4Form

Form_Current_Exit:
Exit Sub

Form_Current_Err:
MsgBox Error$
Resume Form_Current_Exit

End Sub

Sub addFile_Click()
On Error GoTo addFile_Click_Err

If ChildFormIsOpen() Then
CloseChildForm
Else
OpenChildForm
FilterChildForm
End If

addFile_Click_Exit:
Exit Sub

addFile_Click_Err:
MsgBox Error$
Resume addFile_Click_Exit

End Sub
Private Sub FilterChildForm()

If Me.NewRecord Then
Forms![insertfilerim].DataEntry = True
Else
Forms![insertfilerim].Filter = "[nome] = " & Me.[id_rim]
Forms![insertfilerim].FilterOn = True
End If

End Sub
Private Sub OpenChildForm()

DoCmd.OpenForm "insertfilerim"
If Not Me.[addFile] Then Me![addFile] = True

End Sub
Private Sub CloseChildForm()

DoCmd.Close acForm, "insertfilerim"
If Me![addFile] Then Me![addFile] = False

End Sub
Private Function ChildFormIsOpen()

ChildFormIsOpen = (SysCmd(acSysCmdGetObjectState, acForm, "insertfilerim") And acObjStateOpen) <> False

End Function

In questa prima parte c'è il richiamo del form e del primo interruttore funzionante, ovviamente c'è una ripetizione con Child1 Child2 ecc cambiando i relativi dati. Il problema però c'è con Child2 e Child4, ma non capisco perchè avendo copiato ed incollato.

Grazie

ivan.ti
12-08-2010, 20:30
Non ho scritto nel posto sbagliato vero?
E' tutto il giorno che cerco soluzioni sul WEB e sul libro di VB, ma nulla... :cry:
Speravo in una mano qui... Nessuno?