classe1, modulo1, userform1, Foglio1 .... Le differenze

Anonimo
2017-03-26T08:12:03+00:00

Prima di tutto un saluto sincero a tutta la comunity. Non sono solito partecipare attivamente perchè non credo di essere ancora pronto ma vi leggo spesso :)

Ho deciso di scrivere perchè non trovo documentazione specifica all' argomento che sto per esporvi ed anche se ho gia le idee molto chiare a riguardo, sono alla ricerca di ulteriori conferme.

Se poteste aiutarmi nella ricerca ve ne sarei molto grato.

Aprendo l' IDE di Visual Basic per le Applicazioni, attraverso menu -> visualizza finestra progetto (nel caso non sia gi avisualizzata), si è mostrato l' albero del progetto.

Si vedo, in alto, i vari fogli, il workbook; poi sotto, separati in una loro "cartella" ci sono gli eventuali moduli standard, gli eventuali USerform ed infine, i vari moduli di classe dove sono definite le nostre classi personali.

La differenza tra modulo standard e Fogli del workbook ma anche dello stesso workbook, a me sembrano lampanti:

i fogli ed il workbook del progetto sono oggetti mentre il la mia classe personalizzata è un modulo di classe, una classe, un modello pronto a diventare un oggetto nel momento in cui lo istanzierò.

Quindi differente dai fogli, i workbook e gli userform che vedo piùin alto.

Potreste confermarmi o smentirmi questa visione d' inisieme?

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2017-03-26T12:52:24+00:00

Ciao Dracoscrigno_quello_VERO,

Prima di tutto un saluto sincero a tutta la comunity. Non sono solito partecipare attivamente perchè non credo di essere ancora pronto ma vi leggo spesso :)

Benvenuto alla Community. 

Sebbene tu affermi il contrario, è evidente, nel mio giudizio, che tu abbia già una conoscenza dell'IDE di VBA che superi quella di molta gente!

Ho deciso di scrivere perchè non trovo documentazione specifica all' argomento che sto per esporvi ed anche se ho gia le idee molto chiare a riguardo, sono alla ricerca di ulteriori conferme.

Se poteste aiutarmi nella ricerca ve ne sarei molto grato.

Aprendo l' IDE di Visual Basic per le Applicazioni, attraverso menu -> visualizza finestra progetto (nel caso non sia gi avisualizzata), si è mostrato l' albero del progetto.

Si vedo, in alto, i vari fogli, il workbook; poi sotto, separati in una loro "cartella" ci sono gli eventuali moduli standard, gli eventuali USerform ed infine, i vari moduli di classe dove sono definite le nostre classi personali.

La differenza tra modulo standard e Fogli del workbook ma anche dello stesso workbook, a me sembrano lampanti:

i fogli ed il workbook del progetto sono oggetti mentre il la mia classe personalizzata è un modulo di classe, una classe, un modello pronto a diventare un oggetto nel momento in cui lo istanzierò.

Quindi differente dai fogli, i workbook e gli userform che vedo piùin alto.

Potreste confermarmi o smentirmi questa visione d' inisieme?

Credo che i temi sollevati da te siano alquanto ampi e meglio affrontati da un buon libro - come ad esempio (in inglese):

Excel Power Programming with VBA

di John Walkenbach.

         http://spreadsheetpage.com/index.php/book/C45/

Tuttavia, mentre non sono del tutto d'accordo con l'analisi effettuata da te in materia, molto brevamente, e solo grattando la superficie del tema, vorrei offrire le seguenti osservazioni per considerazione.

Ogni elemento visualizzato nella finestra progetto rappresenta un oggetto VBA. Dal momento in cui si inserisce un modulo di classe in un progetto, il modulo di classe esiste come un oggetto. L'unico scopo di un modulo di classe è di agire come un contenitore per le classi. In VBA, un modello classe può comprendere solo una classe.

Una classe è un modello per la creazione di un oggetto e l'unica cosa che si può fare con un modulo di classe è quello di creare un oggetto da esso. La differenza tra una classe e un oggetto è  che la classe  non può eseguire alcuna azione e non consuma memoria. Un oggetto può essere creato dall'istanziazione di una classe e l'oggetto creato può essere qualunque cosa che può essere concettualizzato, Una classe è definita dalle sue Property, che descrivono gli attributi della classe, ei suoi metodi (Sub  e Function).

Per quanto riguarda la differenziazione enunciata da te tra i moduli di classe e altri oggetti che possono essere visualizzate nella finestra progetto, vorrei far notare che i moduli degli oggetti ThisWorkbook, i fogli di lavoro, i fogli grafici e le Userform sono tutti esempi di moduli di classe!

In conclusione,  vorrei esortarti di proseguire e approfondire la tua comprensione con l'acquisto di un buon libro!

Alla prossima!

Postscriptum:

Ti consiglierei successivamente anche l'ottimo libro 

 Professional Excel Development: The Definitive Guide to Developing Applications Using Microsoft Excel, VBA, and .NET: The Definitive Guide to ... and VBA (Addison-Wesley Microsoft Technology)

di By Rob Bovey, Stephen Bullen, John Green, Dennis Wallentin

https://www.amazon.co.uk/Professional-Excel-Development-Applications-Addison-Wesley/dp/0321508793

Da questo libro, vedi il seguente articolo:

             Using Class Modules to Create Objects

**http://www.informit.com/articles/article.aspx?p=1346864**

===

Regards,

Norman

La risposta è stata utile?

0 commenti Nessun commento

2 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2017-03-27T19:09:05+00:00

    Ciao Dracoscrigno_quello_VERO,

    Ciao Norman. Grazie della rpronta risposta, e del consiglio di lettura. Ho seguito il link e, ammetto, quando ho visto il prezzo, ho deciso che non sarebbe stato il caso che spendessi quel popò di denaro per  togliermi una curiosità :P

    Però la Dea bendata è stata clemente ed ho trovato una copia digitale dello stesso titolo, scritto dallo stesso autore del 2002.

    Ho poi confrontato l' indice con quello proposto da te del 2016.

    Perdonami se credo che, a livello concettuale, tra la vecchia e la nuova edizione, passando per tutte le intermedie, ci sia solo marketing ;)

    Alcuni anni, io ho comprato una versione del 2008, di seconda mano ma mai letto ed in condizione perfetta, per circa 2 euro da Amazon. Credo sia ancora possibile:

    https://www.amazon.co.uk/gp/offer-listing/0321262506/ref=sr_1_2_olp?ie=UTF8&qid=1490640514&sr=8-2&keywords=Professional+Excel+Development+bovey

    Grazie ancora mille per il consiglio... va a finire che quel libro del 2016, anceh se costa un botto per le mie tasche vuote, lo acquisterò... così gli faccio far compagnia a quello del .Net.

    Credo sia possibile anche comprare le versione recenti ad un buon sconto!

    Se i tuoi studi dovrebbero dar luogo a ulteriori domande, siamo sempre qui - basta aprire un nuovo thread!

    Nel frattempo, per chiudere questo thread, vorrei chiederti gentilmente di contrassegnare la mia risposta come Risposta preferita. In questo modo, tu aiuterai anche coloro che potessero cercare soluzioni ai problemi simili negli archivi della Community.

        

    Buoni studi!

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2017-03-27T18:32:06+00:00

    Ciao Norman. Grazie della rpronta risposta, e del consiglio di lettura. Ho seguito il link e, ammetto, quando ho visto il prezzo, ho deciso che non sarebbe stato il caso che spendessi quel popò di denaro per  togliermi una curiosità :P

    Però la Dea bendata è stata clemente ed ho trovato una copia digitale dello stesso titolo, scritto dallo stesso autore del 2002.

    Ho poi confrontato l' indice con quello proposto da te del 2016.

    Perdonami se credo che, a livello concettuale, tra la vecchia e la nuova edizione, passando per tutte le intermedie, ci sia solo marketing ;)

    Lui dice:

    "... Code window A code window (sometimes known as a Module window) contains VBA code. Every item in a project has an associated code window. To view a code window for an object, double-click the object in the Project Explorer window. For example, to view the code window for the Sheet1 object, double-click Sheet1 in the Project Explorer window. Unless you’ve added some VBA code, the code window will be empty. Another way to view the code window for an object is to select the object in the Project Explorer window and then click the View Code button in the toolbar at the top of the Project Explorer window. I discuss code windows later on in this chapter (see “Working with Code Windows”)...."

    E poi, più avanti:

    "... As you become proficient with VBA, you’ll be spending lots of time working in code windows. Each object in a project has an associated code window. To summarize, these objects can be

    ✦ The workbook itself (ThisWorkbook in the Project window)

    ✦ A worksheet or chart sheet in a workbook (for example, Sheet1 or Chart1 in the Project window)

    ✦ A VBA module

    ✦ A class module (a special type of module that lets you create new object classes)

    ✦ A UserForm..."

    ....

    Sono consapevole che in un computer, tutto è un oggetto. ... Ma non èche mentre mi leggi, pensi  che il testo che ti fai scorrere sotto gli occhi, sia un treno di battute su una tastiera rimodulato più volte per poter arrivare fino ai tuoi occhi. Tralasci, giustamente, il mezzo per dare spazio a quello che in quel momento ha importanza perchè il livello di astrazione in cui ti trovi prevede che tu non veda treni di bit, rimodulzaioni d' onda, battute su tastiere o pixel variegatamente colorati.

    Tu, mentre mi leggi, sei al livello di "ricevente di un messaggio"

    Allo stesso modo, il livello di astrazione dell' Ide di Excel, come anceh qualsiasi altro ambiente di sviluppo, sarà certamente fato di soli object che rappresenteranno qualcosa.

    IN excel,  a mio avviso, I fogli ed i moduli di classe sono cose che hanno pecuiliarità per cui:

    i foglio sono Oggetti.

    i moduli di classe sono moduli di classe.

    I primi  li adopero direttamene perchè sono gia caricati in memoria.

    i secondi li posso utilizzare per caricare in memoria un object creato su l momento.

    Dei primi non posso crearne innumerevoli copie indipendenti come faccio con i secondi perchè i primi non sono il modello per qualcosa di reale ma sono qualcosa di reale  a forma di un modello ideale...

    ...

    Grazie ancora mille per il consiglio... va a finire che quel libro del 2016, anceh se costa un botto per le mie tasche vuote, lo acquisterò... così gli faccio far compagnia a quello del .Net.

    La risposta è stata utile?

    0 commenti Nessun commento