SET VARIABILE NOTHING



  • SET VARIABILE = NOTHING
    di maxp72 data: 12/04/2013 22:36:25

    Ciao A tutti
    Salve ho un quesito, nel modulo vba ho inserito le istruzioni:

    Public Indirizzo_Cella As String
    Public MACHINE_NUMBER As Byte

    Nello stesso modulo ho una macro che ne richiama una seconda.
    All'interno della seconda macro ho definito le due variabili con i valori che devono prendere.
    - [vedi codice sotto] -

    Infine al termina della prima macro ho inserito il codice :
    Set MACHINE_NUMBER = Nothing
    Set Indirizzo_Cella = Nothing
    per azzerare le variabili, ma mi ritorna un errore:
    "Errore di compilazione: necessario oggetto"
    perche'?

     
    Sub STAMPA_02()
           
    Sheets("Stampa").Select
    Range("B11").Select
    
            Do While ActiveCell.Value <> ""
            ActiveCell.Offset(20, 0).Select '19
            MACHINE_NUMBER = MACHINE_NUMBER + 1
            Loop
            
    Indirizzo_Cella = ActiveCell.Address
    End Sub
    



  • di Vecchio Frac data: 12/04/2013 22:51:58

    Non puoi settare a Nothing niente che non sia stato dichiarato Object (o Variant, ma sempre che punti a un Object).
    VBA non è .Net e quindi i tipi standard non sono oggetti nel senso proprio.
    Ecco perchè l'interprete ti dà quel messaggio.
    Non hai bisogno di annullare variabili String o Byte o Integer o Long: semplicemente esse spariscono dallo scope una volta terminata la procedura in cui sono dichiarate (se sono pubbliche è solo un problema di visibilità, la loro vita dura per la vita del progetto).
    Conclusione: elimina le due istruzioni che tentano di settare a Nothing le due variabili, String e Byte, e tutto andrà bene.






  • di maxp72 data: 12/04/2013 23:17:35

    ok grazie, scusa l'ignoranza...
    dal mio livello di VBA non ho chiaro cosa sia un Object o Variant.
    Avevo letto in giro tra i vari forum che era sempre meglio mettere questa istruzioni alla fine delle macro per liberare la memoria del pc.
    Oggi in verita' mi era capitato che una delle due variabili continuasse ad aumentare perche' avevo lanciato la macro piu' volte ma in realta' sul foglio di lavoro il valore doveva essere 1/2/3, invece era arrivata a 7, cosi' ho pensato di mettere il nothing, come potrei fare per settarla a 0 alla fine della macro?



  • di Vecchio Frac data: 13/04/2013 10:14:59

    Qui nessuno viene giudicato a causa delle proprie conoscenze, a parte totygno che mi massacra in continuazione :)
    Hai letto in giro che quando si fanno riferimenti ad altri oggetti tipo applicazioni Word o Excel o qualsiasi altra cosa creata ad esempio con CreateObject è meglio annientarli all'uscita (in realtà VBA è più flessibile e ci pensa lui a eliminare le istanze aperte, ma è meglio esserne sicuri per non lasciarle "appese" a consumare memoria).
    Per i tipi di dato, scrivi String o Long in una riga vuota del codice e premi F1 per la Guida :)
    Per azzerare una variabile semplicemente impostala a zero o a stringa vuota:
    indirizzo_cella = ""
    machine_number = 0






  • di totygno71 data: 13/04/2013 11:24:59

    @VF
    "La verità ti fa male lo soooooooooooooo...." Cantava Caterina Caselli qualche anno fa! U_U



  • di maxp72 data: 13/04/2013 15:09:47

    Grazie 1000 Vecchio Frac
    sei stato chairissimo.