Maschere di spostamento

di il
6 risposte

Maschere di spostamento

Buonasera.

Vi chiedevo un aiuto sulla sintassi di questa riga di codice:

If Aperta("[Forms]![MENU]![SOTTOMASCHERASPOSTAMENTO]![LISTAPOLIZZARICERCA].[Form]") Then [Forms]![MENU]![SOTTOMASCHERASPOSTAMENTO]![LISTAPOLIZZARICERCA].[Form].Requery
If Aperta("ricerca_polizza") Then Forms!Ricerca_Polizza!LISTAPOLIZZARICERCA.Requery

Ora la seconda riga funziona perfettamente, mentre la prima riga no poichè sbaglio la sintassi della prima parte del codice

If Aperta("[Forms]![MENU]![SOTTOMASCHERASPOSTAMENTO]![LISTAPOLIZZARICERCA].[Form]") Then………..

perchè non punta alla sottomaschera "ListaPolizzaRicerca" situata nella maschera di spostamento.

Vi chiedevo appunto un aiuto sulla sintassi giusta.

Grazie anticipatamente

6 Risposte

  • Re: Maschere di spostamento

    Che senso ha controllare se una SubForm è aperta…?

  • Re: Maschere di spostamento

    Buongiorno

    Ha senso perchè puoi aprire la maschera sia nella maschera di spostamento che al di fuori. 

    Si rende necessario solo in caso di consultazione per evitare di far chiudera la maschera principale su cui stai lavorando che è aperta nella maschera di spostamento.

    Per una questione di comodità praticamente.

  • Re: Maschere di spostamento

    Hai fatto un minimo di ricerca?…. Forse davvero minima.

    Guarda qui:

    https://learn.microsoft.com/en-us/office/vba/api/access.accessobject.isloaded
  • Re: Maschere di spostamento

    Ribadisco che non si controlla se una SubForm è o meno aperta…!

    Se serve si controlla se la Form Madre è aperta, l'oggetto SubForm è diverso dall'oggetto Form… e quando una maschera può avere più utilizzi serve differenziarli…

    Deve essere aperta come Form e non come subForm…

  • Re: Maschere di spostamento

    Ribadisco che non si controlla se una SubForm è o meno aperta…!

    Se serve si controlla se la Form Madre è aperta, l'oggetto SubForm è diverso dall'oggetto Form… e quando una maschera può avere più utilizzi serve differenziarli…

    Deve essere aperta come Form e non come subForm…

    Daccordo con voi ma a me serve solo per il requery della sottomaschera.

    Mi spiego meglio. Ho una maschera “RicercaPolizza” che a sua volta ha una sottomaschera “LISTAPOLIZZARICERCA” .

    Ora nella maschera “RicercaPolizza” c e una combobox per digitare il testo da ricercare  nella sottomaschera “LISTAPOLIZZARICERCA”  che a sua volta fa il requery. 

    Se apro la maschera “RicercaPolizza” fuori dalla maschera di spostamento deve fare questa requery della sottomaschera:

    Forms!Ricerca_Polizza!LISTAPOLIZZARICERCA.Requery

    se invece la stessa maschera la apro all'interno della maschera di spostamento deve fare questa requery:

    [Forms]![menu]![SottomascheraSpostamento]![LISTAPOLIZZARICERCA].[Form].Requery

    Ho questa funzione

    Public Function Aperta(ByVal strMaschera As String) As Boolean
    'Restituisce True se la Maschera è aperta
    Aperta = False
    If SysCmd(acSysCmdGetObjectState, acForm, strMaschera) <> 0 Then
    If Forms(strMaschera).CurrentView <> 0 Then
    Aperta = True
    End If
    End If
    End Function

    che richiamo con il comando

    If Aperta("MENU") Then [Forms]![menu]![SottomascheraSpostamento]![LISTAPOLIZZARICERCA].[Form].Requery
    If Aperta("ricerca_polizza") Then Forms!Ricerca_Polizza!LISTAPOLIZZARICERCA.Requery
    

    e cosi funziona. 

    Il problema e che  ("MENU") e il nome dalla maschera di spostamento che è comune a tutte le maschere  collocate  al suo interno. 

    Io dovrei modificare l indirizzo di puntamento. Cioè dirgli se e aperta la maschera “MENU” dove è presente la maschera “RicercaPolizza” fai questo requery:

    [Forms]![menu]![SottomascheraSpostamento]![LISTAPOLIZZARICERCA].[Form].Requery

    se è aperta la maschera “RicercaPolizza” al di fuori della maschera “MENU” allora fai questo requery:

    Forms!Ricerca_Polizza!LISTAPOLIZZARICERCA.Requery
    

    Scusatemi di nuovo del disturbo.

    Grazie

  • Re: Maschere di spostamento

    Confesso la mia più viscerale avversione per le maschere di spostamento sono inutili e poco pratiche, io uso i Ribbons come Menù Custom li strutturi bene e sono molto più flessibili…!

    Se stai facendo ricerca(ma non stai cercando quanto filtrando), ed usi la proprietà FILTER per cercare e filtrare non serve il Requery, e se pensi di aver bisogno del Requery non stai cercando ma Filtrando…. perchè la ricerca si attua con lo spostamento del Bookmark operando sul FindFirst membro dell'oggetto RecordsetClone, e non necessita di Requery.

    Il Requery serve solo se modifichi parametri in Query, forse è meglio impari ad usare i Filtri…!

    La funzione che usi non va bene e ti ho già spiegato il motivo… ed è chiarissimo anche solo guardandolo:

    If SysCmd(acSysCmdGetObjectState, acForm, strMaschera) <> 0 Then

    Secondo me non hai ben chiara la differenza Form/SubForm… suggerisco di colmare questo tema, ma ci sono altre cose che aumentano la confusione operativa… in sostanza stai usando una logica di dipendenze che non è sintomo di buona tecnica… però fatico a capire bene cosa fai, come operi e che livello di approfondimento possiamo avere per non frullare aria…

Devi accedere o registrarti per scrivere nel forum
6 risposte