Newsgroup: it.comp.appl.access
Titolo: condizione se in base a maschera

Buongiorno a tutti.
Espongo il mio quesito.
Ho due maschere uguali per ricercare un nominativo della tabella
anagrafica. Una mi serve quando sono nella maschera anagrafica per
spostarmi sull'anagrafica che intendo visualizzare; l'altra mi serve
per inserire in una maschera di inserimento (tipo il protocollo)
l'idanagrafica.
Su tasto conferma la prima ha il seguente codice:
Dim stDocName As String
    Dim stLinkCriteria As String
    stDocName = "frmAnagrafica"
    stLinkCriteria = "[IdAnagrafica]=" & Me![Elenconominativi]
    DoCmd.Close
    DoCmd.OpenForm stDocName, , , stLinkCriteria
mentre la seconda:
Forms(Me.OpenArgs).IDAnagrafica = Forms!RicercaAnagrafica!
Elenconominativi
Io vorrei avere un'unica maschera di ricerca con la condizione che se
la maschera chiamante è frmanagrafica il pusante conferma deve
applicare il primo codice, altrimenti deve applicare il secondo.
Io ho provato così ma funziona sempre il secondo:
If Forms(Me.OpenArgs).IDAnagrafica = "frmanagrafica" Then
Dim stDocName As String
    Dim stLinkCriteria As String
    stDocName = "frmAnagrafica"
    stLinkCriteria = "[IdAnagrafica]=" & Me![Elenconominativi]
    DoCmd.Close
    DoCmd.OpenForm stDocName, , , stLinkCriteria
    End If
Select Case DimmiNomeControllo
Case "IdAnagrafica"
Forms(Me.OpenArgs).IDAnagrafica = Forms!RicercaAnagrafica!
Elenconominativi
Case "CodAnagr3"
Forms(Me.OpenArgs).CodAnagr3 = Forms!RicercaAnagrafica!
Elenconominativi
Case Else
DoCmd.Close
Exit Sub
End Select
DoCmd.Close
Forse sbaglio la riga
If Forms(Me.OpenArgs).IDAnagrafica = "frmanagrafica" Then
cosa dovrei cambiare?
Scusate il post lungo.
Grazie.


Allora ho messo sul controllo IdAnagrafica "DoCmd.OpenForm
"RicercaAnagrafica", , , , , , Me.Name"
invece su tasto conferma dell'unica maschera di ricerca:
If Me.OpenArgs = "frmanagrafica" Then
Dim stDocName As String
    Dim stLinkCriteria As String
    stDocName = "frmAnagrafica"
    stLinkCriteria = "[IdAnagrafica]=" & Me![Elenconominativi]
    DoCmd.Close
    DoCmd.OpenForm stDocName, , , stLinkCriteria
    End If
'------------inserito da Carlo per Giuseppe-----------------
'Forms(Me.OpenArgs).IdAnagrafica = Forms!RicercaAnagrafica!
Elenconominativi
Select Case DimmiNomeControllo
Case "IdAnagrafica"
Forms(Me.OpenArgs).IDAnagrafica = Forms!RicercaAnagrafica!
Elenconominativi
Case "CodAnagr3"
Case Else
DoCmd.Close
Exit Sub
End Select
DoCmd.Close
nella maschera frmanagrafica si posiziona sull'IdAnagrafica
selezionato ma mi esce questo messaggio
Errore di run-time '91':
Variabile oggetto o variabile del blocco with non impostata
e  mi evidenzia in giallo nella funzione DimmiNomeControllo la
seguente riga:
DimmiNomeControllo = Nz(MioControllo.Name, "")
Ciao.

 Io ho provato cos� ma funziona sempre il secondo:

C'� un p� di confusione....e non ho capito bene...cos'� DimmiNomeControllo 
?Dove lo dichiari?
Comunque per effettuare un controllo su quale maschera sia aperta
hai diversi metodi uno di questi potrebbe essere IsLoaded
if IsLoaded("nome tua maschera") then
---
else
---
end if
Qui la funzione da incollare in un modulo....
Function IsLoaded(ByVal strFormName As String) As Integer
 ' Returns True if the specified form is open in Form view or Datasheet 
view.
    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
ciao
-- 
Roberto da Parma 

> Io ho provato cos� ma funziona sempre il secondo:

Ma l'hai dichiarato sto DimmiNomeControllo??
Ciao
-- 
Roberto da Parma 

 >> Io ho provato così ma funziona sempre il secondo:

Ciao Roberto, grazie per le risposte.
Allora ho un modulo con
Global MioControllo As Control
Public Function DimmiNomeControllo() As String
DimmiNomeControllo = Nz(MioControllo.Name, "")
End Function
Questo mi permette nella form frmprotocollo di inserire più
destinatari della posta inviata facendo la ricerca da più idanagrafica
e avendo la restituzione del valore nel giusto controllo.
Questa variabile mi fu gentilmente d'aiuto Carlo Costarella.
Quindi procedo con il codice da te postato prima o posso lasciare
quello che ho scritto prima facendo in modo che non esca più il
messaggio di errore?
Grazie. Ciao

 Roberto da Parma
Ho inserito un nuovo modulo con la funzione che mi hai scritto su.
Poi sul pulsante conferma della form di ricerca ho scritto
If IsLoaded("frmanagrafica") Then
Dim stDocName As String
    Dim stLinkCriteria As String
    stDocName = "frmAnagrafica"
    stLinkCriteria = "[IdAnagrafica]=" & Me![Elenconominativi]
    DoCmd.Close
    DoCmd.OpenForm stDocName, , , stLinkCriteria
Else
'Forms(Me.OpenArgs).IdAnagrafica = Forms!RicercaAnagrafica!
Elenconominativi
Select Case DimmiNomeControllo
Case "IdAnagrafica"
Forms(Me.OpenArgs).IDAnagrafica = Forms!RicercaAnagrafica!
Elenconominativi
Case "CodAnagr3"
Forms(Me.OpenArgs).CodAnagr3 = Forms!RicercaAnagrafica!
Elenconominativi
Case Else
DoCmd.Close
Exit Sub
End Select
End If
DoCmd.Close
End Sub
Quando premo conferma mi esce
Eoore di compilazione: Prevista variabile o routine e non modulo
Cosa dovrei fare?
Grazie.

> C'� un p� di confusione....e non ho capito bene...cos'� 

Ma tutto questo dove l'hai inserito?
Hai fatto tutte le dichiarazioni?
Dove si ferma il debug?


 >> C'è un pò di confusione....e non ho capito bene...cos'è

Allora Roberto ho risolto così e funziona:
If Me.OpenArgs = "frmanagrafica" Then
Dim stDocName As String
    Dim stLinkCriteria As String
    stDocName = "frmAnagrafica"
    stLinkCriteria = "[IdAnagrafica]=" & Me![Elenconominativi]
    DoCmd.Close acForm, "ricercaAnagrafica"
    DoCmd.OpenForm stDocName, , , stLinkCriteria
Else
ecc.....
Grazie.
Ciao.

 Ciao.
Bene.
