Newsgroup: it.comp.appl.access
Titolo: Metodo Item dell'oggetto Form non riuscito

Ciao Ragazzi,
Stavo eseguendo la mia funzione per controllare se una mia maschera era
"Aperta" e Vb si è bloccato su questa istruzione:
    If Forms(strNomeDellaMaschera).CurrentView <>
conVisualizzazioneStruttura Then
            Aperta = True
Segnalandomi errore di debug; se controllo il valore delle mie variabili
vedo che sono tutte valorizzate ma sull'istruzione
"(strNomedellaMaschera).CurrentView" mi indica: "Metodo Item dell'oggetto
Form non riuscito"
cosa vuol dire?
 La stessa funzione la uso in altre maschere e funziona correttamente
grazie dell'aiuto
Ciao
Stefano

 ha scritto nel messaggio
news:EIHHa.98854$lK4.2...@twister1.libero.it...

Mai visto questo modo di procedere.
Normalmente per le form si deve intercettare l'errore provocato dal
tentativo di riferimento ad una maschera non aperta e quello ti fa decidere
se è aperta o meno.
Antonio


Ti riporto di seguito la mia funzione completa, forse saro' un po' piů
chiaro
Public Function Aperta(ByVal strNomeDellaMaschera As String) As Boolean
    'Restituisci True se la maschera specificata č aperta in visualizzazione
struttura'
    Const conVisualizzazioneStruttura = 0
    Const conStatoOggettoChiuso = 0
    Aperta = False
    If SysCmd(acSysCmdGetObjectState, acForm, strNomeDellaMaschera) <>
conStatoOggettoChiuso Then
        If Forms(strNomeDellaMaschera).CurrentView <>
conVisualizzazioneStruttura Then
            Aperta = True
        End If
    End If
End Function
ciao Stefano

 ha scritto nel messaggio
news:9RHHa.98888$lK4.2...@twister1.libero.it...

Per determinare se č aperta io uso questa:
Public Function IsLoaded(ByVal strFormName As String) As Integer
'*****************************************************************
'Name      : IsLoaded (Function)
'Purpose   : Verifie if Form passed is already OPEN
'Called by :
'Calls     :
'Inputs    : String=Form.Name
'Output    : Return True if Form is Open
'*****************************************************************
    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
Saluti
@Alex.

 ha scritto nel messaggio
news:D9JHa.99233$lK4.2...@twister1.libero.it...

Ciao Alex,
ho provato anche  la tua Funzione, ma l'errore che mi segnala in fase di
Debug č lo stesso ..... che cosa sto' sbagliando???


[CUT]
Che versione di Access stai usando...???
Sicuramente o 2000 o XP.
Credo pertanto che non hai settato i riferimenti alle Librerie DAO.
Dal modulo VBA vai in Strumenti--Riferimenti e cerca DAO 3.6 o similari...!
@Alex.

 ha scritto nel messaggio
news:824Ia.99976$Ny5.2...@twister2.libero.it...

Avevi ragione, non avevo abilitato i riferimenti a DAO 3.6 Object Library
ma anche dopo aver abilitato questo, mi da' lo stesso identico messaggio, mi
manca qualcos'altro? grazie per la collaborazione, ciao Stefano

 manca qualcos'altro? grazie per la collaborazione, ciao Stefano
scusami ma come fa a darti lo stesso  errore se hai usato la funzione suggerita
da alex?
Che ti dia errore sul metodo item ci sta tutto se tu cerchi di accedere ad una
collezione (insieme) con una chiave che non esiste.
Vuoi proprio usare il metodo item?:
on error resume next
set x = insieme("key")
if err.number <> 0 then msgbox "l'item 'un c'e'"
on error goto 0
--
a.cara 
Togli qualcosa dall'email

 ha scritto nel messaggio
news:3EF1D160...@blunet.it...

io farei anche a meno di usare il metodo item (che è sto' metodo item?)
e la tua funzione la devo mettere in coda alla funzione isloaded (quella di
alex) o in coda alla routine in cui controllo se la mia maschera è aperta?
......... scusami ma sto' cercando di imparare 'da solo' (con qualche libro
e rompendo nel ng) ad utilizzare il codice vb in access ..........
grazie della pazienza ciao Stefano


non e' un "o" e' un "invece"
ricapitoliamo:
1) Un insieme (collezione) e' una specie di array che ha un metodo di default
che si chiama "item" (secondo me e' piu' una proprieta' che un metodo) quando
scrivi insieme("key") e' come se scrivessi insieme.item("Key")
2) l'insieme forms e' appunto un insieme 
3) l'insieme si puo'  scorrere (tutti gli insiemi hanno una proprieta' "count"
predefinita)
4) si puo' accedere direttamente ad un "item" (voce) attraverso una chiave di
ricerca
5) quando si accede direttamente e la voce non c'e' (non c'e' quella chiave
ricercata) si "becca" orrore (proprio orrore non e' un refuso) 
6) Sull'insieme "forms" ci sono solo le forms "aperte" e quindi se cerchi una
maschera che non e' stata aperta "becchi" l'orrore di cui sopra 
a questo punto o:
1) usi la routine suggerita da Alex che usa un altro comando appositamente
definito per tale bisogna (e non solo quella, riferita alla bisogna)
oppure
2) intercetti l'errore attraverso la gestione della "resume next" ed il relativo
ripristino della gestione, sempre dell'errore, attraverso il "goto 0"



In realtà ci è sfuggita una cosa, nel senso che non basta abilitare DAO,
ma come sempre se non la si mette prima di ADO va esplicitato il
riferimento a DAO nel Codice.
Pertanto se puoi, o meglio se non ti crea problemi con l'applicativo
deseleziona ADO, seleziona DAO e riseleziona ADO, e dovrebbe
andare, in alternativa credo dovrai usare ADO anche per verificare
se la Form è aperta in visualizzazione xxx ma ovviamente non è la
proprietà CurrentView......!
@Alex.


Ho provato quanto mi hai detto ma l'errore mi viene segnalato lo stesso, non
più nella funzione isloaded, ma nella routine di controllo (che riporto di
seguito):
Private Sub Form_Current()
If IsLoaded("ArticoliPrezzi") Then
Forms!ArticoliPrezzi.Filter = "[Articolo.ID] = " & Nz([Articolo], 0)
End If
End Sub
il campo [Articolo] fà riferimento alla maschera RigaDocAcquisti (form
corrente), mentre la maschera ArticoliPrezzi è creata da una query tra la
tabella Articolo in cui ho il campo ID  e la tabella Listino2.
Se visualizzo le proprietà della maschera  ArticoliPrezzi vedo che il filtro
è impostato su [Articolo.ID] = 2

 ha scritto nel messaggio
news:UWoIa.103052$Ny5.2...@twister2.libero.it...

Beh, buon segno, significa che abbiamo risolto il problema.......!
Ora ne hai un'altro che mi pare sia di differente natura.
Sinceramente mi pare ci sia un pò di difficoltà a livello di Sintassi
a capire quale sia la Tbl e il Controllo di riferimento.
Se avessi usato la standardizzazione per la nomenclatura degli oggetti
avrei meno difficoltà a capire.
Suppongo possa essere così:
Private Sub Form_Current()
     If IsLoaded("ArticoliPrezzi") Then
     Forms!ArticoliPrezzi.Filter = "[ID] = " & Nz(Me.Articolo, 0)
     Forms!ArticoliPrezzi.FilterOn=true
    End If
End Sub
Ciao @Alex.