Newsgroup: it.comp.appl.access
Titolo: assegnare valore di un variabile ad una funzione

ciao a tutti
 
se assegno ad una variabile il nome di un controllo
su click di un pulsante in una maschera,
per esempio:
 
Pippo = givemenamecontrol
dove givemenamecontrol è questa funzione:
 
Public Function givemenamecontrol() As String
  givemenamecontrol = 
Screen.ActiveControl.Name
 
End Function
 
come faccio ad assegnare a sua volta il valore della variabile "Pippo"
ad un funzione?
per esempio:
 
Public Function fctCriterio_Idf() As Long
  If Pippo = "nMiaFattura" Then
    fctCriterio_Idf = Forms("M_MieFatture")!IdFattura
  Else
    fctCriterio_Idf = 0
 
  End If
End Function
 
grazie


ho risolto salvando il nome del controllo in una casella di testo 
"MioControllo" e poi
 
Public Function fctCriterio_Idf() As Long
  If Forms("M_MieFatture")!MioControllo = "nMiaFattura" Then
    fctCriterio_Idf = Forms("M_MieFatture")!IdFattura
  Else
    fctCriterio_Idf = 0
 
  End If
End Function 
 
Ma per salvarlo in una variabile anzichè un controllo, come si fa?
Grazie.

Franco, un manuale di Access lo hai già acquistato immagino...?
Sicuramente li spiegano le basi per l'uso di SUB/Function...
 
Ora quello che hai fatto è un abominio... a partire da quella FUNZIONE INUTILE... perchè quella è inutile lo sai vero...?
 
Quella Function viene sostituita da questa Istruzione già presente in Access:
 
Me!NomeControllo.Value=IIF(Criterio;ParteVEra;ParteFalsa)
 
Detto questo...
 
Le Funzioni e le Sub supportano Parametri in INPUT... devi usare quelli.
 
Function XX(strParam As String) As Boolean
 
   If strParam="Pippo" then
      XX=True
   Else
      XX=False
   End If
 
End Function
 
 
Saluti...
@Alex


grazie Alex
 
hai ragione, ma
quella funzione in realtà
l'ho semplificata, in realtà è cosi:
 
Public Function fctCriterio_Idf() As Long
On Error Resume Next
 
  If Aperta("M_MieFatture") Then
    If Forms("M_MieFatture")!MioControllo = "nMiaFattura" Then
      fctCriterio_Idf = Forms("M_MieFatture")!IdFattura
    Else
      fctCriterio_Idf = 0
 
    End If
 
  ElseIf Aperta("M_ElencoMieFatture") Then
    fctCriterio_Idf = Forms("M_ElencoMieFatture")!IdFattura
 
  End If
 
End Function
 
quindi mi serve.
 
Non ho capito come utilizzare questa funzione....



ho provato cosi, ma ho errore qui "XX"
 
Function XX(strParam As String) As Boolean
 
   If strParam = "nMiaFattura" Then
      XX = True
   Else
      XX = False
   End If
 
End Function
 
Public Function fctCriterio_Idf() As Long
On Error Resume Next
 
' Nella query come criterio basta: fctCriterio_Idf()
 
  If Aperta("M_MieFatture") Then
    fctCriterio_Idf = IIf(XX, Forms("M_MieFatture")!IdFattura, 0)


      fctCriterio_Idf = IIf(XX, Forms("M_MieFatture")!IdFattura, 0)
 
XX e' una funzione con parametro e quindi la devi richiamare cosi':
fctCriterio_Idf = IIf(XX(
screen.activecontrol.name
), 
Forms("M_MieFatture")!IdFattura, 0)
 
 
 
 
 
 
-- 
ac (x=y-1)
Aborro il Killfile
(La violenza e' l'ultimo rifugio degli incapaci -Salvor Hardin-)
 
---
Questa e-mail è stata controllata per individuare virus con Avast antivirus.
https://www.avast.com/antivirus
 
 


ciao Alessandro e grazie
però non mi funziona, perchè ho notato
con MsgBox XX(
Screen.ActiveControl.Name
)
come faccio click sul controllo mi da 
vero come dovrebbe essere, ma come si
apre la maschera perchè su click del pulsante ho
DoCmd.OpenForm, mi da falso
 

 > 
cut
 
ancora grazie ad Alex e Alessandro
per l'aiuto.
 
Ho una situazione a dir poco strana,
che provo a spiegare...
 
se sui due controlli
uno direttamente sulla maschera Forms("M_MieFatture")!AggiungiFattura
e l'altro nella sottomaschera Forms("M_MieFatture")!SM_MieFatture.Form!nMiaFattura
 
su click di ciascun pulsante inserisco
Me!MioControllo = 
Screen.ActiveControl.Name
 
 
in questo modo, salvo il nome del controllo in una casella di testo nella Maschera Forms("M_MieFatture")!MioControllo 
 
e poi da funzione....
 
Public Function fctCriterio_Idf() As Long
On Error Resume Next
 
  If Aperta("M_MieFatture") Then
    fctCriterio_Idf = IIf(Forms("M_MieFatture")!MioControllo = "nMiaFattura", Forms("M_MieFatture")!IdFattura, 0)
  ElseIf Aperta("M_ElencoMieFatture") Then
    fctCriterio_Idf = Forms("M_ElencoMieFatture")!IdFattura
 
  End If
 
End Function
 
riesco ad avere il valore corretto nella variabile fctCriterio_Idf()
con entrambi i due controlli;
mentre se salvo i nomi dei controlli nella variabile NO!
 
Ho come l'impressione che sia troppo lento a memorizzare il nome dei controlli
nella variabile.
 
Chissà perchè?

CUT
 
ho risolto con OpenArgs
 
If Aperta("M_MieFatture") Then
 
 If Forms("M_MiaFattura").OpenArgs = "nMiaFattura" Then
   fctCriterio_Idf  = Forms("M_MieFatture")!IdFattura
 Else
   fctCriterio_Idf  = 0
 End If
ElseIf Aperta("M_ElencoMieFatture") Then
 fctCriterio_Idf  = Forms("M_ElencoMieFatture")!IdFattura
 
End If
 
ma è normale che anche la seconda openform
funzioni con stLinkCriteria?
 
DoCmd.OpenForm stDocName, , , stLinkCriteria, , , "nMiaFattura"
DoCmd.OpenForm stDocName, , , , , , "nMiaFattura"
 
 


rispondo all'ultima domanda......
non serve stLinkCriteria perchè 
è la funzione che restituisce l'IdFattura