La parte di applicazione che pubblico consiste in una scacchiera (8x8) sulla quale vengono disposte delle pedine. L'applicazione consente di spostare le pedine tramite un doppio click del mouse. Il primo doppio click preleva la pedina, il secondo la deposita in una nuova cella.
Per iniziare costruiamo la scacchiera formattando 8 righe e 8 colonne di un foglio di calcolo in maniera che sembrino quadrati. Nella Fig. 1 ho impostato la larghezza delle colonne al valore di 6,57, l'altezza delle righe al valore di 30,75. Successivamente ho impostato il colore di riempimento delle celle con il nero a celle alterne.
Fig. 1 - Costruzione della scacchiera
Impostare il tipo di carattere di queste celle su "Wingdings", dimensione carattere 26.
Definire come colore del carattere di alcune celle ad esempio il rosso, per altre ad esempio il giallo. Sulle celle in cui è stato definito un colore (giallo o rosso) inserire il carattere 108 (ALT +108). Dopo queste operazioni la scacchiera dovrebbe apparire come in Fig. 2
Fig. 2 - Disposizione delle pedine
Aprire ora l'editor VBA e all'interno della finestra di Gestione progetti (tasti veloci CTRL+R se non è visualizzata) dare un doppio click sul foglio in cui è stata disegnata la scacchiera.
Nel primo combo in alto a sinistra dovrebbe essere selezionato l'oggetto "Worksheet" in quello di destra selezionare l'evento "BeforeDoubleClick". L'edito VBA inserisce dunque una routine che si attiva dopo aver fatto doppio click su una qualsiasi cella del foglio selezionato.
Il parametro più importante della routine è "Target" che rappresenta la cella (il range) su cui si è fatto doppio click.
Prima della routine inserire una variabile per il passaggio dei dati tra 2 lanci consecutivi della routine stessa e una costante string come messaggio da visualizzare quando si tenta di spostare una pedina da una cella nera a una bianca.
Il codice completo della routine è allora:
========================================================================
Dim cellaTemp As Range 'variabile temporaneaConst strAvviso As String = "Mossa non consentita!"
_______________________________________________________________________________
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)
'
If cellaTemp Is Nothing Then 'se cellaTemp è Nothing la mossa è di partenza se Not Nothing è di arrivo
If ActiveCell.Value = "" Then 'la cella di partenza non deve essere vuota
MsgBox strAvviso, vbExclamation, "Dama"
Else
Set cellaTemp = ActiveCell
End If
Else
If ActiveCell.Interior.ColorIndex = 1 Then 'verifica che la cella di arrivo sia nera
With ActiveCell
.Value = cellaTemp.Value
.Font.ColorIndex = cellaTemp.Font.ColorIndex
End With
cellaTemp.ClearContents
Set cellaTemp = Nothing
Else
MsgBox strAvviso, vbExclamation, "Dama"
Set cellaTemp = Nothing
End If
End If
Range("A1").Select
'
End Sub
========================================================================
(A seconda dello schermo e delle impostazioni del browser in uso il codice può apparire più o meno in linea, eventualmente per un utilizzo conviene fare il copia-incolla)
Salvare il tutto con l'attivazione delle macro, chiudi e riapri il foglio attivando le macro. Una volta fatto il doppio click su una cella contenente una pedina, facendo un nuovo doppio click su una cella vuota la pedina viene spostata.
Buon riutilizzo!
Nessun commento:
Posta un commento