Conclusioni

Come ultimo argomento, ci soffermiamo ad analizzare la routine contenuta nel documento di esempio: BarraValuta.xls. La macro inserisce nella barra dei menù "Standard" una casella combinata che permette di calcolare nella cella attiva il cambio valuta tra Euro-Dollaro, Euro-Franco Svizzero, Euro-Sterlina, Euro-Yen e viceversa.
	Dim ComBarEvento As New Classe1
	Sub inserisci_casella_combo()
	Dim combinata As CommandBarComboBox
	Set combinata = CommandBars("standard") _ 
	.Controls.Add(msoControlComboBox)
	With combinata
		.AddItem "Euro-Dollaro"
			.AddItem "Euro-Sterlina"
		.AddItem "Euro-Franco Sv."
		.AddItem "Euro-Yen"
		.AddItem "Dollaro-Euro"
		.AddItem "Sterlina-Euro"
		.AddItem "Franco Sv.-Euro"
		.AddItem "Yen-Euro"
		.Caption = "moneta"
		.DropDownWidth = 100
		.Width = 100
		.ListIndex = 1
		.Visible = True
	End With
	Set ComBarEvento.moneta = combinata
	End Sub
    
Creiamo un nuovo modulo di classe ed inseriamo il codice seguente.
	Public WithEvents moneta As Office.CommandBarComboBox
	Private Sub moneta_Change(ByVal Controllo As _ 
	Office.CommandBarComboBox)
	
	Const converED As Double = 1.3132, _ 
	      converES As Double = 0.7, _
	      converEF As Double = 1.5127, _
	      converEY As Double = 136.8
	Static converDE As Double, _
	       converSE As Double, _
	       converFE As Double, _
	       converYE As Double
	Static Valore As Double, Testo As String
	
	converDE = 1 / converED
	converSE = 1 / converES
	converFE = 1 / converEF
	converYE = 1 / converEY
	
	If IsNumeric(ActiveCell.Value) Then
	   Valore = ActiveCell.Value
	   Testo = Controllo.Text
	   Select Case Testo
	    Case Is = "Euro-Dollaro"
	        Valore = Valore * converED
	    Case Is = "Euro-Sterlina"
	        Valore = Valore * converES
	    Case Is = "Euro-Franco Sv."
	        Valore = Valore * converEF
	    Case Is = "Euro-Yen"
	        Valore = Valore * converEY
	    Case Is = "Dollaro-Euro"
	        Valore = Valore * converDE
	    Case Is = "Sterlina-Euro"
	        Valore = Valore * converSE
	    Case Is = "Franco Sv.-Euro"
	        Valore = Valore * converFE
	    Case Is = "Yen-Euro"
	        Valore = Valore * converYE
	   End Select
	   ActiveCell.Value = Valore
	Else
	    MsgBox "Dato non convertibile"
	End If
	
	End Sub
    
Da notare alcune differenze rispetto agli esempi precedenti. Focalizziamo l'attenzione sulla parola chiave WithEvents nel modulo di classe "Classe1", in questo caso dichiara una variabile di classe CommandBarComboBox, questo perchè stiamo lavorando con una casella combinata. Notiamo inoltre che l'evento associato alla routine è "change", in quanto la routine viene azionata nel momento in cui è selezionata una voce della casella combinata.
Contrariamente alla solita "MsgBox", questa volta abbiamo inserito del codice un po' più interessante, che vale la pena di analizzare. Nel caso venga selezionata una voce dalla casella combinata "moneta", la routine valuta la voce selezionata, e converte l'importo della cella attiva nella valuta che ci interessa calcolare. Nel caso il valore della casella non sia numerico ci verrà segnalata l'impossibilità di eseguire la conversione. Ovviamente al momento in cui proverete la routine, il tasso di cambio sarà variato, se volete essere precisi potete aggiornare le costanti in testa al modulo di classe con i valori di cambio corretti.
Costanti di conversione usati nel programma.
ConverEDTasso di conversione Euro-Dollaro
ConverESTasso di conversione Euro-Sterlina
ConverEFTasso di conversione Euro-Franco Svizzero
ConverEYTasso di conversione Euro-Yen
ConverDETasso di conversione Dollaro-Euro
ConverSETasso di conversione Sterlina-Euro
ConverFETasso di conversione Franco Svizzero-Euro
ConverYETasso di conversione Yen-Euro
Barre e pulsanti personalizzati spesso vengono utilizzati anche per gestire le componenti aggiuntive COM. Le componenti aggiuntive sono dei moduli che non agiscono solamente su un singolo documento, ma aggiungono nuove funzionalità a livello di singola applicazione Office o direttamente su tutto il pacchetto Office.

Cognolato Studio © 2005