Newsgroup: it.comp.appl.access
Titolo: cancel=true

ciao a tutti
 
uso questo codice in una funzione
 
    Dim Risposta As Variant
    Dim Cancel As Integer
    Risposta = vbYes
 
    Risposta = MsgBox("ecc. ecc.  ecc,,,,,,,,,,,,,,,,,,,,,,", vbYesNo, "Attenzione!")
 
    If (Risposta = vbYes) Then
      Cancel = True
 
    if ...ecc.
 
poi la richiamo su scaricamento della maschera
con: If miafunzione(Me) = False Then Exit Sub
 
però anche quando seleziono si, la maschera 
mi si chiude anzichè restare aperta.
 
 
grazie pe l'aiuto.


Quale Funzione...?
CANCEL è un parametro di alcune specifiche Procedure Evento... che espongono il PArametro CANCEL... ma non tutte... e messo li così non serve a NULLA.
 
Quindi mostra la funzione di cui parli ma se è tua... credo tu abbia già capito che puoi toglierlo e ripensare a cosa devi fare...!!!
 
@Alex


grazie Alex
 
non ho trovato il modo per far rimanere aperta la maschera
in caso di risposta "si".
 
ecco la funzione:
 
----------------inizio-------------
 
Public Function LCDiv(frm As Form) As Boolean
 
  Dim X As String
 
  X = ""
 
  X = IIf(Nz(frm!M_LuogoCaricoDiverso_1.Form!IndirizzoMagazzino, 0) = 0, ", Indirizzo", "") _
    & IIf(Nz(frm!M_LuogoCaricoDiverso_1.Form!CAPMagazzino, 0) = 0, ", C.A.P.", "") _
    & IIf(Nz(frm!M_LuogoCaricoDiverso_1.Form!CittàMagazzino, 0) = 0, ", Città", "")
 
  If (X) <> "" Then
    Dim Risposta As Variant
    Risposta = vbYes
 
    Risposta = MsgBox("Attenzione manca:" & Mid(X, 2) & ", vuoi inserire i dati mancanti?.", vbYesNo, "Attenzione!")
 
    If (Risposta = vbYes) Then
 
      If Nz(frm!M_LuogoCaricoDiverso_1.Form!IndirizzoMagazzino, 0) = 0 Then
        frm!M_LuogoCaricoDiverso_1.Form!IndirizzoMagazzino.SetFocus
 
      ElseIf Nz(frm!M_LuogoCaricoDiverso_1.Form!CAPMagazzino, 0) = 0 Then
        frm!M_LuogoCaricoDiverso_1.Form!CAPMagazzino.SetFocus
 
      ElseIf Nz(frm!M_LuogoCaricoDiverso_1.Form!CittàMagazzino, 0) = 0 Then
        frm!M_LuogoCaricoDiverso_1.Form!CittàMagazzino.SetFocus
 
      End If
 
    End If
 
  End If
 
End Function
----------------fine-------------
 

Franco... con te serve molta pazienza...
 
Evento UNLOAD di Form.
 
Fai questa prova con una mascherina semplice:
 
Option Compare Database
Option Explicit
 
Private Sub Form_Unload(Cancel As Integer)
   If msgbox("Chiudo..?",VbYesNo)=vbno then
      Cancel=True
   End it
End Sub
 
@Alex


graze Alex
 
funziona;
cioe' con "si" si chiude
con "no" resta aperta


grazie Alex
anche se cosi' non è il massimo come risultato


ho risolto cosi
 
ho aggiunto questa riga nella funzione
 If (Risposta = vbYes) Then
      LCDiv = True
 
 
poi su scaricamento:
 
If LCDiv(Me) = True Then
  Cancel = True
  Exit Sub
 
End If


ciao Alex
 
quale delle due è meglio usare
 
1-Public Function LCDiv(frm As Form)
2-Public Function LCDiv(frm As Form) as boolean
 
perchè con entrambe funziona


Nessuna delle 2...
Dichiara una Variabile a livello di Maschera ed usa quella, e smettila di creare Funzioni anche solo per fare una virgola.
 
@Alex

 perchè con entrambe funziona
 
Quello che hai mostrato è una Sub che chiami
illegittimamente Function.
 
Una Function esegue qualche operazione e ritorna
un valore che può essere Boolean, Long, etc.
La tua non ritorna niente quindi puoi risparmiarti
As Boolean e simili.
 
Più correttamente dovresti chiamarla
Public Sub LCDiv (frm AS Form).
 
È strano come Access sia a volte esasperatamente
puntiglioso nell'esposizione dei propri costrutti
sintattici, altre volte invece sia eccessivamente
permissivo.
 
Bruno

 @Alex
 
Buona questa.
 
Alfio


grazie Bruno


grazie Alex

Il giorno sabato 19 marzo 2016 20:24:20 UTC+1, Bruno Campanini ha scritto:

modificando in 
Public Sub LCDiv (frm AS Form)
 
per richiamarla come devo fare?
perche' cosi ho errore di compilazione,
If LCDiv(Me) = True Then
  Cancel = True
  Exit Sub
 
End If
 
in piu'anche nella Sub stessa, in questo punto
ho errore di compilazione, argomento non facoltativo: "LCDiv = True"
 
grazie

francode...@gmail.com
 laid this down on his screen :

Una Sub la chiami come una Function, cioè
LCDiv(...), solo che una Sub non restituisce nulla,
quindi If LCDiv() = ... è sbagliato.
 
Ma avevi scritto:
========================
quale delle due è meglio usare
 
1-Public Function LCDiv(frm As Form)
2-Public Function LCDiv(frm As Form) as boolean
 
perchè con entrambe funziona
========================
Quindi il problema corrente era risolto.
Tienti le elucubrazioni teoriche per le
prossime circostanze.
 
Bruno


grazie Bruno


Ciao Bruno
però con queste modifiche
 
Public Function DDiv(frm As Form) As Boolean
................
 If (Risposta = vbYes) Then
  --->LCDiv = True
 
è da considerarsi una funzione,
giusto?