13/12/2023 - Jocman ha scritto:
…e richiamo la funzione, in cui è presente la parte di automazione word per fare, ad esempio, l'elenco puntato, verrà eseguita correttamente?
Prova e già la fase di Compila dovrebbe darti l'idea (ecco, l'hai fatto nel frattempo: qualcosa sai fare da solo se ti impegni)
Function Testo01()
appWord.Selection.TypeText "Hello"
End Function
La funzione Testo01 conosce cos'è appWord? Dipende dall'area di validità della variabile/oggetto. Per non ampliare inutilmente lo visibilità della variabile, passala come parametro alla funzione, nel caso specifico si tratta di un oggetto quindi è ByRef.
Se in una Funzione/Sub vuoi che siano disponibili variabili/oggetti dichiarati ed usati nel codice chiamante, passi il tutto come parametro.
Private Sub TuaSub()
Dim appWord As Word.Application
....
appWord.Selection.TypeText "Hello"
...
End Sub
può essere spezzata così
Private Sub TuaSub()
Dim appWord As Word.Application
....
Call Testo01(appWord)
'si può anche chiamare la funzione solo con
'Testo01 appWord
'o ancora
'Testo01 myWordApp:=appWord (quando i parametri sono tanti può far comodo)
...
End Sub
Private Function Testo01(ByRef myWordApp as Word.Application)
myWordApp.Selection.TypeText "Hello"
End Function
Per la chiamata alla funzione ho usato il Call, così si evidenzia meglio, ma si può tranquillamente scrivere direttamente il nome della funzione, premi spazio e si attiva l'intellisense che chiede di inserire un parametro di tipo Word.Application.
Per non confondere i nomi delle variabili ho usato appWord e myWordApp, in modo che si capisca che nella funzione sto usando myWordApp, non sto usando la variabile appWord che non è accessibile direttamente. Solo passandola come parametro “per riferimento” (ByRef) le due puntano “alla stessa cosa”: appWord e myWordApp, ognuna nella propria funzione/sub, sono la stessa cosa, non sono una la copia dell'altra.
Questo esempio è ovviamente senza utilità, non ha senso creare una funzione per una cosa del genere, però serve a far capire che passando appWord alla funzione Testo01, quello stesso oggetto viene poi trattato all'interno della funzione come potresti fare nel codice principale.
In generale, se vuoi rendere disponibile una variabile ad una funzione/sub chiamata la passi come parametro. Poi dipende se vuoi che venga gestito come “la stessa cosa dell'originale” e che quindi ogni modifica fatta al parametro sia riportata nella variabile della procedura chiamante o se ti interessa solo averle a disposizione ma della loro eventuale modifica non ti importa più niente. Ma questo è un altro discorso rispetto al quesito principale del thread.
Definisci sempre se una funzione è Private o Public, non lasciare al modulo in cui si trova scegliere se è implicitamente Private o Public. In caso di copia incolla potresti trovarti brutte sorprese. Nel dubbio sempre validità minima, Private. Solo se serve la dichiari Public.
13/12/2023 - Jocman ha scritto:
il secondo è se sarò capace di mettere in pratica i vostri suggerimenti / consigli
Stendiamo un velo non necessariamente pietoso.