Newsgroup: it.comp.appl.access
Titolo: Maschere che si aprono e che si chiudono ... a loro piacimento !

Problema
Ho tre maschere principali
Menu
Dettagli Nave
Armatori
Voglio accedere dalla maschera  FrmMenu  sulla maschera FrmArmatori
inizia codice
sull'evento click del pulsante CmdArmatori
docmd.close
docmd.openform "FrmArmatori"
fine codice
Poi apro la maschera dettagli nave
vado nella ComboArmatori ne seleziono uno
e clickando nel comando CmdApriSchedaArmatori voglio che
inizia codice
'apra la maschera
docmd.openform ," FrmArmatori"
docmd.gotocontrol ("IDA")                 ' dove IDA stà per id Armatori
'mi trovi il record  corrispondente a quello selezionato nella casella
combinata
docmd.findrecord  form_FrmDettagliNave.ComboArmatori
'e si posizioni sulla casella relativa alla ragione sociale degli armatori
docmd.gotocontrol ("TxtArmatori")
finisce codice
poi sul pulsante chiudi della maschera FrmArmatori
'verifica se la maschera dettagli nave è visible
if form_FrmDettagliNave.visible = true then       ' ed in caso positivo
docmd.close ' si chiude solamente
else         ' altrimenti
docmd.close ' oltre a chiudersi
docmd.openform "FrmMenu" ' apre anche la machera menu
end if
Il problema è che spesso e volentieri la condizione impostata nella routine
di chiusura non viene rispettata
praticamente
anche se la maschera FrmDettagliNave è visible , apre comunque anche la
maschera Menu
in questo modo chiunque utilizzerà il software non capirà + cosa deve
clicckare , insomma
una casinata !!!!!!!
c'è qualcuno che sa il perchè, ho scritto cazzate io , oppure è OFFICE 2000
ogni tanto sbacchetta!!!!!!!!!
Grazie per l'aiuto , tra l'altro urgentissimo
Ciao a tutti
Marco
ant...@tiscali.it

 ha scritto nel messaggio
news:a2ue91$gfb$1...@lacerta.tiscalinet.it...



Grazie Antonio per aver risposto alla mia email
ma purtroppo non funziona
sto letteralmente uscendo di testa .....
Il problema è che il PROBLEMA me lo causa al primo avvio ...
mi spiego meglio .
Apro il file
quindi la maschera menu
le chiedo di aprire la maschera armatori ... lo fa ma non mi caga alcune
righe di codice
dove ci sono delle impostazioni legate a delle condizioni (if.... then )
fondamentali.
chiudo la maschera Armatori la riapro ... e come per incanto mi legge e mi
esegue tutto
il codice ....
apro quindi la maschera dettagli nave  e mi crea lo stesso casino
praticamente legge tutto il codice solo qunado ne ha voglia
sono arrivato al punto di pensare che il PC stia complottando nei miei
confronti ...
mi stò incazzando ....
Vi prego ditemi che sono io che sbaglio  e dove lo faccio , altrimenti sono
a rischio
di esaurimento nervoso!!!!!!!!!!!!!
grazie
marco
ant...@tiscali.it

 ha scritto nel messaggio
news:a2vc8t$rhs$1...@lacerta.tiscalinet.it...

Perché non ci racconti come è fatto il codice VBA che viene eseguito a
puntate, ma innanzitutto dicci a fronte di quale evento lo hai generato.
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------


Buongiorno
Intanto ti dico che mi dispiace per quanto ti è accaduto e ti faccio i
migliori Auguri  per una buona guarigione !!!!
Ora cerco di quotarti le parti di codice legato alle  maschere  :
Partendo dalla maschera di "Menu ":
Sull'evento click del pulsante CmdApriArmatori
Private Sub CmdApriArmatori_Click()
'chiudo il menu
    DoCmd.Close
        'apro la maschera Armatori
            DoCmd.OpenForm "FrmArmatori"
End Sub
Sull'evento click del pulsante CmdApriDettagliNave
Private Sub CmdApriDettagliNave_Click()
'chiudo il menu
    DoCmd.Close
        'apro la maschera FrmDettagliNave
            DoCmd.OpenForm "FrmDettagliNave"
End Sub
Nella maschera Dettagli Nave esiste una ComboArmatori
nella quale posso selezionare l'Armatore relativo alla Nave
se esso non è contenuto nella Combo perchè non ancora
inserito attraverso l'apposita Maschera Armatori , all' evento
NotInList della Combo succede questo :
Private Sub ComboArmatori_NotInList(NewData As String, Response As Integer)
'Inserimento Armatore quando non presente in elenco
If MsgBox("L' Armatore selezionato non è in elenco. Inserirlo ora ?",
vbExclamation + vbOKCancel) = vbOK Then
    Response = acDataErrContinue
    DoCmd.OpenForm "FrmArmatori", , , , acFormAdd
    Forms!frmarmatori![txtArmatori] = NewData
Else  ' p.e. se ha sbagliato
    Response = acDataErrContinue
    ComboArmatori.Undo
End If
End Sub
dopo aver inserito il nuovo nominativo vado sul pulsante CmdChiudi della
maschera "FrmArmatori":
Private Sub CmdChiudi_Click()
'verifica se la maschera dettagli nave è visibile
if Form_FrmDettagliNave.visible = true then
DoCmd.Close ' e chiude la maschera FrmArmatori
else ' viceversa
DoCmd.Close 'chiude la maschera FrmArmatori
DoCmd.Openform "Menu"  'ed apre la maschera "Menu"
_exitCmdChiudi_click:
Exit Sub
End Sub
Alla chiusura della maschera FrmArmatori al fine di inserire il nominativo
nuovo nella ComboArmatori succede questo :
Private Sub Form_Close()
DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
'verifica se la maschera dettagli nave è visibile
If Form_FrmDettagliNave.Visible = True Then 'quindi
Forms!FrmDettagliNave!ComboArmatori = Me![IDA]
' dove IDA é la chiave primaria e anche usato nel combo
Forms!FrmDettagliNave!ComboArmatori.Requery
Else
DoCmd.Close , "FrmArmatori", acSaveYes
End If
End Sub
Notizie che reputo utili
Nella Maschera FrmDettagliNave al selezionamento di un Armatore dalla
ComboArmatori
appaiono i numeri di telefono dell'Armatore selezionato - solo per dirti che
nella query
della Maschera FrmDettagliNave c'è il campo Armatori (numerico) relazionato
a IDA
contatore della Maschera/Tabella Frm/TblArmatori  ( spero di essere stato
chiaro)
Nella Maschera DettagliNave esiste un CmdSchedaArmatori dal quale posso
accedere
alla Maschera Armatori , qualora si avesse l'esigenza di consultare e/o
modificare i dati
relativi all'Armatore selezionato per quella Nave , visto che nella Maschera
DettagliNave
sono riportati solo i numeri di telefono (consultazione rapida attraverso la
nave)
il codice è il seguente :
Private Sub CmdSchedaOperatori_Click()
'apre la scheda Armatori
If ComboArmatori.Value <> "" Then
DoCmd.OpenForm "FrmArmatori"
'va al record corrispondente a quello selezionato nella combo _
 della maschera Dettagli Nave
DoCmd.GoToControl ("IDA")
DoCmd.FindRecord Form_FrmDettagliNave.ComboArmatori
DoCmd.GoToControl ("txtArmatori")
Else
'messaggio di errore qunado si cerca di aprire la scheda di un Armatore
inesistente
MsgBox "Non è possibile aprire la scheda di un Armatore non esistente",
vbExclamation
If vbOK Then
ComboArmatori.SetFocus
End If
End If
End Sub
Dopo tanto scrivere cerco di ridescrivere sostanzialmente il problema :
All'apertura del DB apro la Masch Menu  ... quindi clicco su apri Maschera
Armatori
ed alla sua chiusura invece di chiudermi la maschera Armatori e riaprirmi la
maschera  Menu
mi apre la maschera Menu ma non mi chiude quella Armatori
poi la riapro la richiudo e funziona ...
poi apro la maschera dettagli nave , la richiudo e funziona . Ma se dalla
maschera dettagli nave
seleziono un armatore apro la maschera armatori dal pulsante scheda eppoi la
richiudo in considera
zione della condizione mascheradettaglinave.visible true al click sul
pulsante chiudi mi dovrebbe
solo chiudere la maschera armatori ... ed invece apre la maschera Menu ...
scasinando tutto!
Immagino che sia complicato riuscire a capire qualcosa da quanto ti ho
quotato ma confido nella tua ottima conoscenza della materia .... anche se
qua
probabilmente occorre un miracolo ... !!!!
Ti ringrazio anticipatamente ... anche se non vorrei ti affaticassi
molto!!!!
Roberto in poche parole ... se ne hai voglia aiutami  altrimenti lascia
perdere ...
e non preoccuparti .... la salute prima di tutto
Grazie ancora
Ciao e in bocca al lupo
Marco
ant...@tiscalinet.it


[CUT]
Prima di tutto ti ringrazio per le tue attenzioni nei miei riguardi: ma stai
tranquillo che quando mi sento stanco mollo. :)
Sicuramente la cosa è alquanto ingarbugliata, quindi forse vale la pena
affrontarla un po' alla volta.
Ho diversi dubbi sul codice che mi hai postato prova a togliermene qualcuno:
1) A cosa ti serve sapere se la maschera dettagli nave è visibile o non
visibile? Forse ti serve sapere se tale maschera è aperta oppure no?
2) Ma Form_FrmDettagliNave di cui vai a testare la proprietà Visible cosa è?
Un controllo di una maschera? Per sapere se la maschera FrmDettagliNave è
visibile opure no, non avreste dovuto scrivere:
    If Forms!FrmDettagliNave.Visible = True Then
3) Nella Sub Form_Close() di FrmArmatori scrivi: DoCmd.Close ,
"FrmArmatori", acSaveYes
Ma l'argomento acSaveYes non ha significato solo se tu avessi aperto la
maschera in modalità Design?
Visto poi l'intreccio degli eventi, non sempre è possibile essere certi di
quale maschera sia attiva: a tale scopo proverei a sostituire tutti i
comandi generici DoCmd.Close con DoCmd.Close acForm, "NomeMaschera".
Se chiarendo queste cose riuscissimo a capire perché nella Sub
CmdChiudi_Click() si apre la maschera Menu ma non si chiude la maschera
FrmArmatori, avremmo fatto un piccolo primo passo.


 visibile? Forse ti serve sapere se tale maschera č aperta oppure no?
Intanto grazie per aver risposto alla mia ,  e soprattutto per la pazienza
che hai avuto
nel leggere tutto ...
Ora cerco di spiegarti il motivo pecui sono dovuto ricorrere alla condizione
if form_FrmDettagliNave.Visible = True then .....
Praticamente si puň accedere alla maschera FrmArmatori sia dal pulsante
CmdApriArmatori posto nella maschera Menu
sia dal pulsante
CmdSchedaArmatori posto nella maschera FrmDettagliNave
quest'ultimo mi permette di aprire la Maschera Armatori dalla Maschera
DettagliNave
Per tagliare corto
Se apro la maschera armatori dal pulsante posto sulla Maschera Menu
quando la devo chiudere vorrei cliccare sul pulsante CmdChiudi
per chiudere la maschersa Armatori e riaprire la maschera Menu
viceversa se la apro la maschera Armatori dalla maschera DettagliNave
qunado la devo richiudere vorrei cliccare nello stesso pulsante CmdChiudi
e questa volta , in virtů del fatto cha la maschera DettagliNave č "APERTA",
vorrei tornare alla Maschera DettagliNave senza aprire nessuna maschera.
L'esigenza di tenere aperta la maschera dettaglinave qunado da essa apro
quella Armatori č perchč solo cosě posso , una volta aperta la maschera
Armatori , raggiungere il l'armatore corrispondente a quello selezionato
nella
ComboArmatori della maschera dettaglinave.
questa č la routine del pulsante CmdApriSchedaArmatori posto sulla Maschera
DettagliNave:
Private Sub CmdSchedaArmatori_Click()
'apre la scheda Armatori
If ComboArmatori.Value <> "" Then
DoCmd.OpenForm "FrmArmatori"
'va al record corrispondente a quello selezionato nella combo _
 della maschera Dettagli Nave
DoCmd.GoToControl ("IDA")
DoCmd.FindRecord Form_FrmDettagliNave.ComboArmatori
DoCmd.GoToControl ("txtArmatori")
Else
'messaggio di errore qunado si cerca di aprire la scheda di un Armatore
inesistente
MsgBox "Non č possibile aprire la scheda di un Armatore non esistente",
vbExclamation
If vbOK Then
ComboArmatori.SetFocus
End If
End If
End Sub
Fine della prima puntata .....
Bene Roberto , sempre con la preghiera di tener cura prima della tua salute,
penso di averti dato materiale a sufficienza per poter capire quello che stň
cercando di fare .... e che non funziona proprio come vorrei.
Credo sia palese dirti che č da poco che sto maneggiando VB e Access, ma
programmare non č il mio lavoro , io ho a che fare con tutt'altro mestiere
che
come avrai capito ha a che fare con le navi ... e per il quale stň cercando
di costruire
un gestionale .
Ti ringrazio anticipatamente per la tua estrema educazione e cortesia che
usi
nel rispondere a tutti nel NG
Ti saluto
Marco
ant...@tiscalinet.it


[CUT]
Ti propongo di cambiare alcune cose in alcune routine VBA che hai postato;
dome queste modifiche verificare se è cambiato qualcosa.
Come prima cosa memorizza in un modulo del tuo database la seguente
funzione, che servirà a verificare se una maschera è aperta:
Function IsLoaded(ByVal strFormName As String) As Integer
    Const conObjStateClosed = 0
    Const conDesignView = 0
    If SysCmd(acSysCmdGetObjectState, acForm, strFormName) <>
conObjStateClosed Then
        If Forms(strFormName).CurrentView <> conDesignView Then
            IsLoaded = True
        End If
    End If
End Function
Modifica nel modo seguente la routine generata a fronte dell'evento "Su
clic" del pulsante CmdApriArmatori della maschera Menu:
Private Sub CmdApriArmatori_Click()
DoCmd.Close acForm, "Menu"
DoCmd.OpenForm "FrmArmatori"
End Sub
Modifica nel modo seguente la routine generata a fronte dell'evento "Su
clic" del pulsante CmdApriDettagliNave della maschera Menu:
Private Sub CmdApriDettagliNave_Click()
DoCmd.Close acForm, "Menu"
DoCmd.OpenForm "FrmDettagliNave"
End Sub
Modifica nel modo seguente la routine generata a fronte dell'evento "Su
clic" del pulsante CmdChiudi della maschera FrmArmatori:
Private Sub CmdChiudi_Click()
DoCmd.Close acForm, "FrmArmatori"
If Not IsLoaded("FrmDettagliNave") Then
    DoCmd.OpenForm "Menu"
End If
End Sub
Riduci all'essenziale nel modo seguente la routine generata a fronte
dell'evento "Su chiusura" della maschera FrmArmatori:
Private Sub Form_Close()
If IsLoaded ("FrmDettagliNave") Then
    Forms!FrmDettagliNave!ComboArmatori = Me![IDA]
    Forms!FrmDettagliNave!ComboArmatori.Requery
End If
End Sub
Prova a vedere se, dopo queste modifiche cambia qualcosa nel comportamento
del tuo database.


 dome queste modifiche verificare se è cambiato qualcosa.
[CUT]
Ciao Roberto
Prima di tutto scusa il ritardo nel risponderti , ma questi giorni non ho
potuto accedere al computer
perchè sono stato fuori per lavoro.
Poi ho appreso che tornerai in ospedale per dei controlli, in bocca al lupo
, e sappi che siamo
tutti con te !!!!!
Ti faccio tanti auguri !!!!!
Per quanto riguarda le routines che mi hai mandato, GRAZIE , mi hanno
aiutato a risolvere almeno
in parte buona parte del problema, o per meglio dire quel problema è stato
risolto ma perchè tutto
funzioni bene credo debba fare un pò di ordine e pulizia nel resto del
codice ... ti terrò informato
a tempo debito !!!!! Per ora concentrati sul tuo problema , e relax my
friend !!!!!
Ciao grazie ancora di tutto , ti aspettiamo presto!!!!!!
Marco
ant...@tiscali.it

 
ant...@tiscali.it
Ciao
Roberto