Newsgroup: it.comp.lang.visual-basic
Titolo: Help su variabile

ciao a tutti,
in una maschera, devo controllare se i vari campi sono stati
compilati.A tale scopo ho inserito una funzione e, sul pulsante di
uscita della form ho impostato
Private Sub Comando22_Click()

mi si è inceppato il PC...
ciao a tutti,

Private Sub Comando22_Click()
           Cancel = fctcontrolla
End Sub
Ora, visto che funziona tutto, ho ripetuto Cancel = fctcontrolla e la
relativa funzione in un' altra maschera ma su clic del pulsante di
uscita mi compare l' errore "Variabile non definita".
Perchè mi succede in una form e non in un' altra???
grazie
Marco

 ha
scritto:

Se fctcontrolla è una funzione prova a mettere tutto il percorso. per esempio
 main.myform.fctcontrolla
o metti la funzione in un modulo .bas
--
ciao
  Stefano

 Perchè mi succede in una form e non in un' altra???
...
forse perche' hai dichiarato la variabile (immagino Cancel, giusto?) solo
nella prima form e non nella seconda; poi hai anche Option Explicit e non
dichiarando la variabile, esce proprio quell'errore li.
ciao... Maurizio
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Perchè mi succede in una form e non in un' altra???
Perchè Cancel ha senso solo dove esiste: nell'evento QueryUnload ad es., 
dove sarà stata usata dalle altre form.
Ciao

 questo articolo e` stato inviato via web dal servizio gratuitohttp://
www.newsland.it/newssegnala
 gli abusi ad 
a...@newsland.it
Anche nella 1° form ho messo su ComandoXX_Click() cioè il pulsante la
stessa cosa; cancel = fctcontrolla ma non funziona comunque
devo forse dichiarare qualcosa prima di cancel = fctcontrolla? oppure
si può escludere Opion explicit (da menu > opzioni non si esclude)...
grazie

 Ciao
Ok ma anche nell' altra form il cancel l' ho usato sul pulsante di
uscita della maschera...
devo forse usare altri comandi al posto di cancel o definire l' evento
su altre zone della form anzichè sul pulsante?

 grazie
...
Come prima cosa ti consiglierei di cambiare quel nome alla variabile, dato
che VB la utilizza un bel po' di volte per i fatti suoi.
Diciamo che la nuova variabile la chiamiamo Cancello, se hai Option
Explicit (che ti consiglio di tenere sempre attivo, anche se e' possibile
disattivarlo), DEVI dichiarare una variabile prima di poterla utilizzare.
Che tipo di variabile e'? Una booleana?
Ok, Dim ( o Private, o Public, o come credi) Cancello as Boolean
Dove l'hai dichiarata questa variabile? E come?
Se l'hai dichiarata nella "sezione" generale del primo form, ed e' Private
(o Dim, in questo caso e' lo stesso), allora questa variabile sara' vista
solo nel form 1, e non potra' essere utilizzata nel form 2, a meno che non
ne dichiari una uguale anche nel form 2, ma attenzione, anche se le due
variabili avranno lo stesso nome, saranno due cose totalmente diverse ed
indipendenti.
L'hai dichiarata Public a livello di modulo? La variabile sara' visibile
ovunque nel tuo progetto, e bastera' dichiararla una sola volta, ma ti
occupera' risorse per tutto il tempo in cui il tuo EXE sara' in piedi.
Ti serve solo per quelle due procedure e non la tocchi mai in altri posti?
Dichiarala in entrambe le procedure come privata a quella procedura, la
sua vita sara' limitata alla procedura stessa e non occupera' risorse se
non per i pochi istanti in cui sara' impegnata.
Poi, bisognerebbe sapere cosa hai scritto per far cio' che chiedi, dove
hai dichiarato la tua Cancel, e roba del genere.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 


 > Perchè Cancel ha senso solo dove esiste: nell'evento QueryUnload ad es.,


Allora forse è perchè negli altri form la prima riga di codice NON è Option 
Explicit.
La prima riga di codice di un modulo DEVE essere Option Explicit, altrimenti 
VB ti lascia fare obbrobri incedibili senza darti errori.
Detto questo il richiamo di Cancel non serve a una pippa :)
Come fai a dire al tuo form di chiudersi?
Ciao 


Allora, non essendo un programmatore e non avendo piena conoscenza di
variabili o funzioni, per spiegarmi meglio ti lascio tutto il codice
che ho utilizzato.
l' ordine di creazione del db è il seguente:
TabellaA => QueryA => MascheraA dove nella maschera ho il pulsante
Comando57
Private Sub Comando57_Click()
    cancella = fctcontrolla
End Sub
Function fctcontrolla() As Boolean
    Dim ctl As Control
    Dim strMsg As String
    For Each ctl In Controls
        If ctl.Tag = "Controlla" Then
            If IsNull(ctl) Then
            ctl.SetFocus
            ctl.BackColor = RGB(255, 255, 255)
            strMsg = strsg & vbNewLine & ctl.Name
            End If
        End If
        Next
        If strMsg <> "" Then
        Vrisp = MsgBox("" & vbNewLine & "Dato mancante in :" &
vbNewLine & vbNewLine, vbYesNo)
            If Vrisp = vbYes Then
            DoCmd.CancelEvent
            Me.ActiveControl.BackColor = RGB(255, 0, 0)
            ElseIf Vrisp = vbNo Then
            DoCmd.Close acForm, "M_MotivazioneFermateInsDati"
            End If
        fctcontrolla = True
        Else
        DoCmd.Close acForm, "M_MotivazioneFermateInsDati"
        End If
End Function
Poi ho creato TabellaB => QueryB => MascheraB dove nella maschera ho
il pulsante Comando40.
nell' oggetto di classe di questa seconda form ho semplicemente
copiato tutto il codice basandomi ovviamente sul comando40.
Ho fatto ancora uguale per la MascheraC creata con lo stesso
percorso...
grazie

 ha scritto nel messaggio

Effettivamente se tolgo Option Explicit funziona tutto...
come mi comporto però visto che dici che Option explicit ci deve
essere per forza?
devo cambiare tutto il codice che rileva i dati mancanti?

 devo cambiare tutto il codice che rileva i dati mancanti?
...
Si, devo riscrivere tutto il codice... tutto il codice che serve a
dichiarare la variabile Cancel(LO).
Come ti dicevo prima, Dim Cancel(LO) as Boolean... poi vedi tu quanti e
dove metterne.


 devo cambiare tutto il codice che rileva i dati mancanti?
Inizia a mettere l'option explicit e a far smettere VB di lamentarsi.
Ciao 

 > > uscita della maschera
...
tra l'altro, come dice giustamente Fabio, ma che la utilizzi a fare quella
variabile Cancel? Non ti serve a nulla.
Da quel che vedo, la utilizzi solo per chiamare la funzione che ti
"elabora" il tutto, assegni il valore di ritorno alla variabile Cancel, e
poi la nostra eroina muore li.
Non fai prima a scrivere una routine anziche' una funzione?
Oppure quella variabile Cancel la utilizzi in qualche maniera, dopo?


 Ciao
Sembra che abbia smesso di lamentarsi definendo un paio di
variabili...
Speriamo in bene e grazie ancora a tutti
Ciao