Newsgroup: it.comp.appl.access
Titolo: confrontare due Funzioni

ciao a tutti
 
ho due funzioni:
1-Intervallo_DataInizio
2-Intervallo_DataFine
 
è possibile crearne una terza p.e.
 
Public Function Intervallo_Date_Inizio_Fine( _
  ByVal Data_Inizio As Variant, _
  ByVal Data_Fine As Variant, _
  ByRef msg As String, _
  ByRef vbe As String) As Boolean
 
    If Data_Inizio > Data_Fine Then
      ' La Data Inizio non puo' essere superiore alla Data Fine
      msg = "La 'Data Inizio' deve essere inferiore alla 'Data Fine'"
      vbe = "Attenzione!!!"
      Exit Function
    End If
 
 
Grazie

Si puoi anche farne una quarta...
Tuttavia se spieghi meglio la domanda, forse la risposta portebbe essere meno evasiva.
 
@Alex


Ciao Alex e grazie
 
ho queste due funzioni:
 
Public Function Intervallo_DataInizio( _
  ByVal Data As Variant, _
  ByRef msg As String, _
  ByRef vbe As String) As Boolean
 
    If IsNull(Data) Then
      ' Il campo non puo' essere Null
      msg = "Devi inserire la Data Inizio!!!"
      vbe = "Attenzione!!!"
      Exit Function
    End If
 
    If Data < Forms("Pannello comandi")!Dal Then
      ' La Data Inizio non puo' essere inferiore alla Data Inizio del Pannello comandi
      msg = "La 'Data Inizio' deve essere superiore al " & Format(Forms("Pannello comandi")!Dal, "dd/mm/yy")
      vbe = "Attenzione!!!"
      Exit Function
    End If
 
    If Data > Forms("Pannello comandi")!al Then
      ' La Data Inizio non puo' essere superiore alla Data Fine del Pannello comandi
      msg = "La 'Data Inizio' deve essere inferiore al " & Format(Forms("Pannello comandi")!al, "dd/mm/yy")
      vbe = "Attenzione!!!"
      Exit Function
    End If
 
Intervallo_DataInizio = True
End Function
 
Public Function Intervallo_DataFine( _
  ByVal Data As Variant, _
  ByRef msg As String, _
  ByRef vbe As String) As Boolean
 
    If IsNull(Data) Then
      ' Il campo non puo' essere Null
      msg = "Devi inserire la Data Fine!!!"
      vbe = "Attenzione!!!"
      Exit Function
    End If
 
    If Data < Forms![Pannello comandi]!Dal Then
      ' La Data Fine non puo' essere inferiore alla Data Inizio del Pannello comandi
      msg = "La 'Data Fine' deve essere superiore al " & Format(Forms![Pannello comandi]!Dal, "dd/mm/yy")
      vbe = "Attenzione!!!"
      Exit Function
    End If
 
    If Data > Forms("Pannello comandi")!al Then
      ' La Data Fine non puo' essere superiore alla Data Fine del Pannello comandi
      msg = "La 'Data Fine' deve essere inferiore al " & Format(Forms![Pannello comandi]!al, "dd/mm/yy")
      vbe = "Attenzione!!!"
      Exit Function
    End If
 
Intervallo_DataFine = True
End Function
 
e vorrei aggiungere..........................
 
    If Intervallo_DataInizio > Intervallo_DataFine Then
      msg = "La 'Data Inizio' deve essere inferiore alla 'Data Fine'"
 
   If Intervallo_DataFine > Intervallo_DataInizio Then
     msg = "La 'Data Fine' non può essere inferiore alla 'Data Inizio'!!!"

Non hai valutato invece di fare solo 1 FUNZIONE... con un Parametro aggiuntivo che condiziona il tipo di confronto...?
 
Public Function Confronto(DataIN As Date, _
      DataSTART As Date, _
      DataSTOP as Date, _
      TipoConfronto as Byte, _
      ByRef msg As String, _
      ByRef vbe As String) As Boolean
 
    If IsNull(Data) Then
      ' Il campo non puo' essere Null
      msg = "Devi inserire la Data Fine!!!"
      vbe = "Attenzione!!!"
      Exit Function
    End If 
 
    Select Case TipoConfronto
       Case Is=1
          ' Il contenuto della Funzione 1 ripulito...
 
       Case Is=2
          ' Il contenuto della Funzione 1 ripulito...
 
       Case Is=3
          ' Il contenuto della Funzione 1 ripulito...
    End select
 
    Intervallo_DataFine = True 
End Function.
 
Ora fai attenzione a 2 cose...
 
1° Non usare la variabile [VBE] è una parola riservata...
2° Attento agli EXIT FUNCTION non forzano il valore di restituzione della Funzione a TRUE, quindi a cosa serve una Funzione...?
 
@Alex


ciao Alex
 
non ho capito
come utilizzare il 
Case Is=1
 
e come devo fare per richamare la funzione

cut...
 
ciao a tutti
 
ho maschera con due controlli
 
"DataInizio" e "DataFine"
 
con un'unica funzione
vorrei controllare il contenuto
dei due controlli considerando
il suggerimento di Alex, ma
non riesco a venire a capo.
 
Ecco la funzione:
 
  Public Function Intervallo_Date( _
  ByVal DataIn As Variant, _
  DataStart As Date, _
  DataStop As Date, _
  TipoConfronto As Byte, _
  ByRef msg As String, _
  ByRef ban As String) As Boolean
 
    If IsNull(DataIn) Then
      ' Il campo non puo' essere Null
      msg = "Devi inserire la 'Data Inizio'!!!"
      ban = "Attenzione!!!"
      Exit Function
    End If
 
    If DataIn < Forms("Pannello comandi")!Dal Then
      ' La Data Inizio non puo' essere inferiore alla Data Inizio del Pannello comandi
      msg = "La 'Data Inizio' deve essere superiore al " & Format(Forms("Pannello comandi")!Dal, "dd/mm/yy")
      ban = "Attenzione!!!"
      Exit Function
    End If
 
    If DataIn > Forms("Pannello comandi")!al Then
      ' La Data Inizio non puo' essere superiore alla Data Fine del Pannello comandi
      msg = "La 'Data Inizio' deve essere inferiore al " & Format(Forms("Pannello comandi")!al, "dd/mm/yy")
      ban = "Attenzione!!!"
      Exit Function
    End If
 
    Select Case TipoConfronto
        Case Is = 1
        If DataStart > DataStop Then
          msg = "La 'Data Inizio' deve essere inferiore alla 'Data Fine'!!!"
        End If
 
    End Select
 
Intervallo_Date = True
End Function 
 
 
 
________________
e questo codice per
richiamarla, ma non va bene!
 
    Dim msg_DataIn As String
    Dim ban_DataIn As String
 
 
    If Intervallo_Date("Me!DataInizio.Value", 0, 0, 1, _
                    msg_DataIn, _
                    ban_DataIn) = False Then
    MsgBox msg_DataIn, vbExclamation, ban_DataIn
    Me!DataInizio.SetFocus
    Exit Sub
 
 
 
Grazie per l'aiuto


I 3 Case sono i contenuti delle tue 3 Funzioni... che inserirai all'interno del CASE...
Quando chiami la funzione specifichi quale CASE applicare ai dati...
 
Chiaramente non funziona se non la scrivi giusta e quello che hai scritto ora è molto fuori mano... perchè proprio non hai compreso il senso...
 
Quindi prova ad inserire all'interno dei CASE la logica di confronto che la singola funzione deve applicare, magari fai delle prove semplificate, segui con il DEBUG il percorso e prendi confidenza con questo suggerimento... alla fine compreso lo adatti.
 
 
@Alex

grazie Alex
ci provo ma non so utilizzare il DEBUG

 ci provo ma non so utilizzare il DEBUG
 
Se non sai fare DEBUG, non puoi sviluppare VBA... devi imparare nel modo più assoluto.
 
@Alex


Ciao Alex
mi puoi riportare qualche link?
grazie


in assenza del maestro...:-)
vedi:
http://mirror.masterdrive.it/alessandrobaraldi/DettaglioFaq.asp%3FIdFAQ=298.html
 
ciao
 
Daniele


grazie Daniele

 Daniele
 
Ehehehe troppa roba... ero molto volenteroso...
Ricordo che su AccessGroup c'è tutto...
 
@Alex


grazie Alex


ciao Alex
nel Debug come richiamo la funzione nel mio caso?
non cosi  ?Confronto(),
allora come?
 
 


nella finestra 'immediata' devi inserire
 
a=confronto()
 
ovviamente devi aver messo un breakpoint sulle prime righe all'interno 
della funzione per vedere riga dopo riga come funziona

grazie

 grazie
 
ciao RobertoA
ho fatto
?a=confronto(),
ma ho l'errore:
"errore di compilazione
argomento non facoltativo"
ma anche nelle funzioni che vanno bene
ho il medesimo errore.
 
p.e. anche in questa funzione mi da quell'errore.
 
Public Function NumS(S As String) As String
Dim I As Long
For I = 1 To Len(S)
    If IsNumeric(Mid(S, I, 1)) Then
        NumS = NumS & Mid(S, I, 1)
    End If
Next
End Function
 
 

CUT.......
 
ho quest'errore :
"errore di compilazione argomento non facoltativo"
 
in tutte le funzioni che tra parentesi hanno delle variabili
p.e. Function fctRound(varNr As Variant, Optional varPl As Integer = 2) As Double
 
 
mentre se ho p.e. questa funzione:
Function fTrovaFatturaCli()
 
no!!!
 
chi mi sa dire dove sbaglio?
forse manca una libreria?
Grazie.


ciao Alex e grazie
 
ecco cosa riuscito a fare, ma con il debug ancora non riesco.
 
prima di DataStart e DataStop si deve mettere "ByVal"?
 
Public Function Confronto( _
  DataStart As Variant, _
  DataStop As Variant, _
  TipoConfronto As Byte, _
  ByRef msg As String, _
  ByRef ban As String) As Boolean
 
    If IsNull(DataStart) Then TipoConfronto = 1
    If DataStart < Forms("Pannello comandi")!Dal Then TipoConfronto = 2
    If DataStop > DataStop Then TipoConfronto = 8
 
    Select Case TipoConfronto
        Case Is = 1
          ' Il campo non puo' essere Null
          msg = "Devi inserire la 'Data Inizio'!!!"
          ban = "Attenzione!!!"
          Exit Function
 
        Case Is = 2
          ' La Data Inizio non puo' essere inferiore alla Data Inizio del Pannello comandi
          msg = "La 'Data Inizio' deve essere uguale o superiore al " & Format(Forms("Pannello comandi")!Dal, "dd/mm/yy")
          ban = "Attenzione!!!"
          Exit Function
 
        Case Is = 3
          ' La Data Fine non puo' essere superiore alla Data Inizio
          msg = "La 'Data Fine' deve essere uguale o superiore alla 'Data Inizio'!!!"
          ban = "Attenzione!!!"
          Exit Function
 
 
    End Select
 
Confronto = True
End Function
 
_________
 
    Dim TipoConfronto As Byte
    Dim msg_DataInizio As String
    Dim ban_DataInizio As String
    Dim msg_DataFine As String
    Dim ban_DataFine As String
 
    If Intervallo_Date(Me!DataInizio.Value, Me!DataFine.Value, _
                    TipoConfronto, _
                    msg_DataInizio, _
                    ban_DataInizio) = False Then
    MsgBox msg_DataInizio, vbExclamation, ban_DataInizio
 
    If IsNull(Me!DataInizio) Then Me!DataInizio.SetFocus
    If IsNull(Me!DataFine) Then Me!DataFine.SetFocus
    Exit Sub

Lascia stare... fai 3 Funzioni.
 
@Alex

 @Alex
 
grazie Alex