L'oggetto
Scenario e l'insieme Scenarios |
L'oggetto
Scenario, facente parte dell'insieme Scenarios e legato all'oggetto
WorkSheet rappresenta uno scenario in un foglio di lavoro,
ovvero un gruppo di valori detti celle variabili.
Uno Scenario è un insieme di valori che possono essere
sostituiti automaticamente all'interno del foglio di lavoro
e rappresenta un utile strumento (denominato "metodo
con analisi what-if") per prevedere i possibili risultati
di un foglio di lavoro: si può ad esempio considerare
diversi gruppi di celle (più Range) di un foglio di
lavoro, e quindi considerare ipotesi differenti passando a
tali scenari per visualizzare i diversi risultati.
L'esempio riportato dalla guida in linea di MS Excel è
esplicativo:
"[
] Se ad esempio si desidera creare un bilancio,
ma le entrate non sono certe, è possibile definire
diversi valori delle entrate e passare da uno scenario all'altro
per effettuare un'analisi per ipotesi.
È
possibile denominare lo scenario dell'esempio precedente "Caso
peggiore", impostare il valore nella cella B1 a L. 5.000.000
e il valore nella cella B2 a L. 1.320.000. Il nome del secondo
scenario potrebbe essere "Caso migliore", il valore
in B1 L. 15.000.000 e il valore in B2 L. 2.600.000. [
]"
All'interno dell'insieme Scenarios (definito oggetto-insieme
in quanto anch'esso rappresenta un'oggetto a sé stante),
ogni Scenario è dotato di indice.
Per indicare così un particolare Scenario si indicherà:
Scenarios(indice_scenario) |
dove
indice_scenario rappresenta proprio l'indice dello Scenario.
Per poter creare un nuovo Scenario per il foglio di lavoro
(foglioExcel) correntemente utilizzato ed aggiungerlo col
relativo indice all'insieme Scenarios, si utilizza il metodo
Add, la cui sintassi è la seguente:
FoglioExcel.Scenarios.Add(nome,
celle_variabili, valori, commento,
bloccato, nascosto) |
dove
nome indica naturalmente il nome in formato String
che si desidera assegnare al nuovo scenario (il nome dello
Scenario deve essere unico, quindi se si tenta di creare uno
Scenario con un nome già in uso si avrà un errore)
celle_variabili è un valore di tipo Variant
che indica il Range ossia il gruppo di celle da associare
all'oggetto Scenario, valori indica invece una matrice
che contenga i valori da assegnare alle celle del Range indicato.
Se valori viene omesso allora si utilizzeranno i valori correnti
contenuti correntemente all'interno delle celle indicate.
Commento è invece una dato di tipo String che
indica un commento personalizzato che è possibile assegnare
al particolare Scenario di nuova creazione.
Se viene indicato un commento valido, quando viene aggiunto
un nuovo scenario il nome dell'autore e la data vengono automaticamente
aggiunti all'inizio del relativo commento.
Bloccato indica se lo Scenario verrà bloccato
(True) o meno (False) per permettere o impedire a qualsiasi
utente del foglio di lavoro di modificare i valori dello Scenario
stesso.
Infine nascosto indica se lo Scenario verrà
mantenuto invisibile (True) o meno (False).
Per comprendere l'utilità del metodo si consideri il
seguente esempio:
in un foglio di calcolo sono stati immessi i valori relativi
a diversi accessori di computer:
La
tabella sopra può essere generata nel seguente modo:
With
foglioExcel
.Cells(1, 1).Value = "Componente": .Cells(1,
2).Value = "Prezzo in €"
.Cells(2, 1).Value = "RAM 128MB": .Cells(2,
2).Value = "78"
.Cells(3, 1).Value = "RAM 512MB": .Cells(3,
2).Value = "258"
.Cells(4, 1).Value = "RAM 256MB": .Cells(4,
2).Value = "141"
.Cells(5, 1).Value = "HD 20GB": .Cells(5, 2).Value
= "165"
.Cells(6, 1).Value = "CD-ROM 48X": .Cells(6,
2).Value = "75"
.Cells(7, 1).Value = "Monitor 17'1": .Cells(7,
2).Value = "240"
End With |
Siccome
questi sono i dati originali, salviamoli come primo scenario
in quanto successivamente le celle verranno modificate automaticamente.
Si applicherà dunque il metodo Add alle celle dei valori
numerici ossia B2-B7 assegnando allo Scenario il nome "Ipotesi
originale" ed il commento "Questo è lo scenario
originale":
foglioExcel.Scenarios.Add
"Ipotesi originale", foglioExcel.Range("B2:B7"),
_
"Questo è lo scenario originale.", True |
Con
il valore True si indica il blocco dello scenario da eventuali
modifiche.
Il codice appena visto corrisponde all'esecuzione della finestra
Excel "Aggiungi scenario", raggiungibile dal menu
Strumenti >> Scenari:
Adesso
è possibile fare una prima prova contando gli Scenari
presenti nell'insieme Scenarios utilizzando così il
metodo Count dell'insieme-oggetto Scenarios:
MsgBox
foglioExcel.Scenarios.Count |
Il
risultato sarà naturalmente 1.
Ora utilizzando le proprietà Name, Comment, Index,
Hidden e Locked si può determinare le proprietà
di tale Scenario, proprietà che erano state impostate
al momento della creazione:
Totale_Scenari
= foglioExcel.Scenarios.Count
For ii = 1 To
Totale_Scenari
MsgBox "Nome: " & foglioExcel.Scenarios(ii).Name
& vbCrLf & _
"Commento: " & foglioExcel.Scenarios(ii).Comment
& vbCrLf & _
"Nascosto? " & foglioExcel.Scenarios(ii).Hidden
& vbCrLf & _
"Indice: " & foglioExcel.Scenarios(ii).Index
& vbCrLf & _
"Bloccato? " & foglioExcel.Scenarios(ii).Locked
& vbCrLf
Next ii |
Queste
sono solo alcune delle proprietà di cui l'oggetto Scenario
dispone, le uniche che possano essere visualizzate in una
finestra di messaggio. In aggiunta esistono ulteriori proprietà
tra cui le più significative sono: ChangingCells che
come visto poco fa restituisce un oggetto Range con le celle
variabili in esso contenute, la proprietà Values che
restituisce una matrice contenente i valori correnti delle
celle variabili dello scenario, la proprietà Creator
(che comunque sarebbe stato possibile visualizzare nella finestra
di messaggio) che restituisce l'applicazione che ha creato
l'oggetto, sottoforma di intero a 32 bit. Ad esempio se l'oggetto
è stato creato da MS Excel come nel caso preso in esame,
si otterrà stringa XCEL, corrispondente al valore esadecimale
5843454C.
Si provi adesso a creare un secondo Scenario utilizzando valori
differenti da quelli indicati poco fa come originali ad esempio
valori 75, 250, 153, 82, 260 come componenti di una matrice
di valori, ed associare al nuovo Scenario il nome "Ipotesi
1" ed il commento "Questa è la prima ipotesi".
Il valore di blocco dello Scenario sarà anche questa
volta impostato su True:
foglioExcel.Scenarios.Add
"Ipotesi 1", foglioExcel.Range("B2:B7"),
_
Array(75, 250, 153, 82, 260), "Questo è la
prima ipotesi.", True |
Si
noterà che è stato utilizzato lo stesso Range
dello Scenario originale (B2:B7) per permettere ai valori
di occupare le caselle dove nell'ipotesi originale erano contenuti
i prezzi in euro. Una seconda cosa da notare è che
gli elementi della matrice sono 5 e non 6 come i componenti
nella lista perché si suppone che ad esempio il costo
dell'ultimo elemento, il monitor, sia certo.
Ora si riapra nel foglio di lavoro la finestra "Gestione
scenari": ciccando su "Riepilogo
" si
otterrà la lista degli scenari creati:
Si
crei un terzo scenario inserendo questa volta i valori 60,
278, 139, 64, 250, inclusi sempre in una matrice di valori
ed assegnandogli il nome "Ipotesi 2", il commento
"Questa è la seconda ipotesi" e impostando
la proprietà Locked su True:
foglioExcel.Scenarios.Add
"Ipotesi 2", foglioExcel.Range("B2:B7"),
_
Array(60, 278, 139, 64, 250), "Questo è la
seconda ipotesi.", True
|
Ora
si può passare agilmente da uno Scenario all'altro
semplicemente utilizzando il metodo Show dell'oggetto Scenarios
ed indicando l'indice dello Scenario da visualizzare (1 per
"Ipotesi originale", 2 per "Ipotesi 1"
e 3 per "Ipotesi 2").
Se si inserisce nel progetto un oggetto CommandButton per
ogni Scenario si può passare da uno Scenario all'altro
con la pressione del tasto corrispondente:
Private
Sub
Command1_Click()
foglioExcel.Scenarios(1).Show
End Sub
Private Sub Command2_Click()
foglioExcel.Scenarios(2).Show
End Sub
Private Sub Command3_Click()
foglioExcel.Scenarios(3).Show
End Sub |
Questo
è lo Scenario visualizzato alla pressione di Command1:
questo
è lo Scenario visualizzato premendo Command2:
e
questo è lo Scenario visualizzato premendo Command3:
Per
finire si può creare un nuovo foglio di lavoro contenente
un rapporto di riepilogo degli scenari presenti nel foglio
di lavoro corrente attraverso il metodo CreateSummary. Si
inserisca sul piano un quarto controllo CommandButton:
La
prima colonna indica le celle variabili, la seconda i valori
correntemente visualizzati sul foglio di lavoro mentre tutte
le successive rappresentano i valori contenuti nei rispettivi
Scenari.
|