Domandina sulla dichiarazione delle variabili in visual basic....?

sto scrivendo un programmino con excel 2003.

Ho un userform nel quale ho dichiarato, all'inizio, nella parte "general" la variabile cninteger cosi' :

public cninteger as integer

Poi ho scritto una macro che mi seleziona una cella, in funzione del valore di cninteger, in questa maniera:

Dim fine As Integer

fine = cninteger + 2

Range("A" & fine).Select

Se io adesso faccio partire il form che mi portera' la variabile cninteger ad assumere il valore, ad esempio, 6, e se poi faccio partire la macro dal foglio excel, ottengo che il valore di cninteger non viene considerato, e nel foglio in questione viene selezionata la cella A2, invece che A8.

Come mai?

Grazie mille per chi vorra' rispondermi....

3 risposte

Classificazione
  • Anonimo
    1 decennio fa
    Risposta preferita

    senti ti do un consiglio...non fare doomande di questo genere su yahoo, poichè non credo nessuno qui possa aiutarti, (ka tua domanda(almeno per me lo è) è troppo difficile....forse è vero che non avrei dovuto rispondere, ma lo faccio per avvisarti di porre le domande su forum specializzati in questo campo dove magari riceverai sicuraente più risposte e magari la soluzione del tuo problema

  • 1 decennio fa

    La variabile così dichiarata ha validità solo quando è caricata la form, e in questo caso devi chiamarla

    fine = UserForm1.cninteger + 2

    perché

    fine = cninteger + 2

    fa riferimento a una variabile non dichiarata cninteger. Non essendo dichiarata e non essendoci l'opzione OPTION EXPLICIT nel modulo della macro, il compilatore crea la variabile quando viene utilizzata (chiaramente pulita, con valore zero)

    Quindi, se la form è sempre caricata, puoi sistemare il tutto chiamando la variabile UserForm1.cninteger, come scritto sopra. Altrimenti, puoi dichiarare la variabile in ThisWorkbook, sempre come public.

    In ogni caso, ti consiglio di specificare per tutti i moduli l'opzione OPTION EXPLICIT (all'inizio di ogni modulo) che ti costringe a dichiarare tutte le variabili, ma così eviti problemi come quello che hai avuto.

    Buona programmazione!

  • 1 decennio fa

    Premesso che non programmo in VisualBasic da qualche anno.. E che non mi sono mai cimentato più di tanto negli script in VBA con Excel..

    Il problema, a mio avviso, è che la tua variabile "cninteger" dichiarata come Public nella parte "general" non ha una visibilità globale, o non mantiene il valore che le viene assegnato (come tu stesso avrai dedotto).

    Purtroppo la programmazione in VB (rispetto ad una più restrittiva e severa programmazione in linguaggio C) lascia molta "libertà d'iniziativa" al compilatore.. E spesso ci si trova di fronte a comportamenti quasi "random" delle variabili e del programma.

    Non sono certo che sia la soluzione al tuo problema..

    Ma se dichiari "cninteger" semplicemente con un generico:

    Dim cninteger as integer

    sempre nella parte "general" del tuo "ThisWorkbook", non ottieni l'effetto desiderato? La variabile dovrebbe comunque essere "globale" in tutto il worksheet Excel..

    Fai sapere se riesci a risolvere o se il problema persiste.

    In bocca al lupo.

Altre domande? Fai una domanda e ottieni le risposte che cerchi.