[Risolto] Richiamare variabile definita in più Sub

Creare una macro - Scrivere uno script - Usare le API
Rispondi
Avatar utente
Biagio91
Messaggi: 238
Iscritto il: mercoledì 3 febbraio 2021, 20:25

[Risolto] Richiamare variabile definita in più Sub

Messaggio da Biagio91 »

Ciao a tutti,

Data una stringa di testo "Ciao" che si definisce come XYZ="Ciao"
Visto che questa variabile deve essere usata su molteplici sub, esiste il modo (presumo di si ma non capisco come) per far sì che XYZ possa essere scritto solo su una sub del tipo

Codice: Seleziona tutto

Sub DefineXYZ
XYZ="Ciao"
End Sub
E che tutti gli altri sub possano utilizzarla?
ad esempio

Codice: Seleziona tutto

Sub Pippo 'oppure Pluto, Orazio o Clarabella
Saluto = InputBox ("Inserire il valore di XYZ", 0, "Prova:")
 If Saluto <> XYZ Then 
  MsgBox "Codice Errato, Ritenta.", "Errato"
  Exit Sub
 Else
  MsgBox "Baci e Abbracci", "Corretto"
 End If
End Sub

Grazie mille
Ultima modifica di Biagio91 il domenica 18 aprile 2021, 20:53, modificato 1 volta in totale.
OpenOffice 4.1.8 su Windows 7-10
::::May we meet again into the matrix::::
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Richiamare variabile definita in più Sub

Messaggio da patel »

La risposta te l'ho già data nel post degli asterischi
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Avatar utente
Biagio91
Messaggi: 238
Iscritto il: mercoledì 3 febbraio 2021, 20:25

Re: Richiamare variabile definita in più Sub

Messaggio da Biagio91 »

Si ho visto, riporto per praticità, mi dici:

"Dichiarare una variabile prima delle sub equivale a dichiararla globale, cioè accessibile da tutte le sub, per accertartene puoi fare delle prove. Non esitare a testare varie soluzioni, è così che si impara."

Ho provato...ma non capisco come fare... in questo esempio io metto nell'intestazione

Codice: Seleziona tutto

Dim XYZ As String
XYZ = "Ciao"

Sub Pippo 'oppure Pluto, Orazio o Clarabella
Saluto = InputBox ("Inserire il valore di XYZ", 0, "Prova:")
If Saluto <> XYZ Then
  MsgBox "Codice Errato, Ritenta.", "Errato"
  Exit Sub
Else
  MsgBox "Baci e Abbracci", "Corretto"
End If
End Sub
Ma niente...

Ho provato a fare Pure

Codice: Seleziona tutto

Sub DefineXYZ (XYZ)
Dim XYZ As String
XYZ = "Ciao"
End Sub

Sub Pippo 'oppure Pluto, Orazio o Clarabella
Call DefineXYZ
Saluto = InputBox ("Inserire il valore di XYZ", 0, "Prova:")
If Saluto <> XYZ Then
  MsgBox "Codice Errato, Ritenta.", "Errato"
  Exit Sub
Else
  MsgBox "Baci e Abbracci", "Corretto"
End If
End Sub
E molte altre prove...ma andando a tentoni non ho risolto; ho letto la guida ufficiale sulle variabili pubbliche di openoffice calc, ma oltre a dire che mettendole nell'intestazione bisogna metterci Dim o Public non spiegano come richiamare il valore di quella variabile.
Sto sbagliando approccio?? Mi sono perso qualcosa??

L'ultima prova che ho fatto è stata quella che forse si è avvicinata di più ma ancora penso di essere distante:

Codice: Seleziona tutto

'-----------------------
Dim XYZ As String
'-----------------------
Sub DefineYXZ 
XYZ="Ciao"
End Sub
'-----------------------
Sub Pippo 'oppure Pluto, Orazio o Clarabella
Saluto = InputBox ("Inserire il valore di XYZ", "Prova:")
If Saluto <> XYZ Then
  MsgBox "Codice Errato, Ritenta.", "Errato"
  Exit Sub
Else
  MsgBox "Baci e Abbracci", "Corretto"
End If
End Sub
'-----------------------
Cosa sbaglio? Nell'ultima prova mi da sempre MsgBox relativo all'Errato
OpenOffice 4.1.8 su Windows 7-10
::::May we meet again into the matrix::::
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Richiamare variabile definita in più Sub

Messaggio da patel »

Codice: Seleziona tutto

Dim XYZ As String
    '-----------------------
    Sub DefineYXZ
    XYZ="Ciao"
    call Pippo '<<<<<<<<<<<<<<<<<
    End Sub
    '-----------------------
    Sub Pippo 'oppure Pluto, Orazio o Clarabella
    Saluto = InputBox ("Inserire il valore di XYZ", "Prova:")
    If Saluto <> XYZ Then
      MsgBox "Codice Errato, Ritenta.", "Errato"
      Exit Sub
    Else
      MsgBox "Baci e Abbracci", "Corretto"
    End If
    End Sub
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Avatar utente
Biagio91
Messaggi: 238
Iscritto il: mercoledì 3 febbraio 2021, 20:25

Re: Richiamare variabile definita in più Sub

Messaggio da Biagio91 »

Ciao Grazie mille,

Ok questo funziona eseguendo la macro DefineXYZ;

Se volessi invece fare al contrario, ovvero eseguire le Macro Pippo, Pluto, Orazio, Clarabella senza dover ogni volta scrivere sul loro codice XYZ="Ciao" ??

Seguendo lo stesso ragionamento in teoria dovrebbe bastare inserire il call sulla macro chiamante Pippo, e chiamare la macro Define XYZ...ma non mi funzia mica...mi sono fatto l'idea che con l'end sub si azzeri tutto quello che era stato definito prima e quindi non vada per forza....come potrei fare quindi per fare questo??

Grazie mille
Ciao
OpenOffice 4.1.8 su Windows 7-10
::::May we meet again into the matrix::::
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Richiamare variabile definita in più Sub

Messaggio da patel »

La variabile pubblica viene vista da tutte le sub chiamate dalla principale, poi viene rilasciata, per fare quello che vuoi tu devi usare una cella del foglio, magari non visibile.
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Avatar utente
Biagio91
Messaggi: 238
Iscritto il: mercoledì 3 febbraio 2021, 20:25

Re: Richiamare variabile definita in più Sub

Messaggio da Biagio91 »

Ok quindi diventerebbe tipo

Codice: Seleziona tutto

Sub Pippo 'oppure Pluto, Orazio o Clarabella

FoglioFisso = ThisDocument.Sheets.GetByName("NomeFoglio")
CellaFissa = FoglioFisso.GetCellRangeByName("A1")
XYZ= CellaFissa.String

Saluto = InputBox ("Inserire il valore di XYZ", "Prova:")
    If Saluto <> XYZ Then
      MsgBox "Codice Errato, Ritenta.", "Errato"
      Exit Sub
    Else
      MsgBox "Baci e Abbracci", "Corretto"
    End If
    End Sub
E la parte

Codice: Seleziona tutto

FoglioFisso = ThisDocument.Sheets.GetByName("NomeFoglio")
CellaFissa = FoglioFisso.Cells.GetRangeByName("A1")
XYZ= CellaFissa.String
Dovrei ripeterla per ogni macro interessata.
Corretto?

Effettivamente basterebbe tenere la cella in questione veramente fissa e si è apposto...dov'è l'inghippo? sembra quasi troppo bello per essere vero XD
OpenOffice 4.1.8 su Windows 7-10
::::May we meet again into the matrix::::
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: [Risolto] Richiamare variabile definita in più Sub

Messaggio da patel »

corretto
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Rispondi