› Sviluppare funzionalita su Microsoft Office con VBA › select case
-
AutoreArticoli
-
Salve,
ho usato l'istruzione Select Case e adesso vorrei aggiungere un'altra richiesta:
"se quella condizione si presenta si presenta x volte allora scrivi x"
In particolare "se selezioni una determinata cella x volte allora scrivi in un'altra cella x"
Vorrei sapere solo come concatenare select case con quest'if oppure se esiste un altro modo.
Grazie.
Ah bè questo è un quesito diverso dal solito 🙂
Chiarisci cosa intendi con "se selezioni una determinata cella". Lo deve fare l'utente? lo fa la macro via codice spostando la cella attiva?
In ogni caso è possibile "concatenare" (rectius: annidare) più costrutti Select Case, proprio come fai con If.
Fai vedere uno spezzone di codice così chiariamo il problema.
Se puoi, definisci meglio il problema specifico altrimenti restiamo nella didattica e forse ti serve poco (perchè ogni problema può avere più soluzioni e invece di cercare la soluzione più adatta investiamo post a parlare di teoria).
Il massimo sarebbe avere un file di esempio su cui ragionare, anche per avere lo scenario d'uso sottomano.
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Select Case Cell Case B2 MsgBox "ciao" Case B3 MsgBox "arrivederci" Exit Sub End Select end subEd io vorrei dire che se la condizione Case B2 si presenta x volte voglio scrivere "ciao x" con x variabile.
Sì, la selezione della cella deve farla l'utente.
Edit by VF: ho formattato la parte di codice con l'apposito pulsante ("codice VBA")
Bene, allora direi che puoi tenere il conto di quante volte l'utente scrive "ciao" modificando una cella nascosta (o lontana nel foglio in modo che non sia visibile), facendo sì che funga da contatore. Al raggiungimento della condizione ci fai quello che vuoi.
Lo schema sarebbe una cosa simile:
Private Sub Worksheet_SelectionChange(ByVal Target As Range) if target = "ciao" then range("contatore") = range("contatore") + 1 if range("contatore") = 10 then msgbox "Ciao ": range("contatore") = 0 end subNon testato 🙂 anche perchè ancora non ho capito lo scopo.
Purtroppo adesso devo chiudere, ma tu continua a postare che poi quando posso leggo tutto.
Leggendo meglio, però, adesso capisco una cosa diversa da quella che ho scritto.
Tu non devi scrivere un testo in una cella e intercettare quante volte l'utente scrive questo testo. Tu vuoi intercettare ogni volta che l'utente clicca su una cella e quando si arriva a dieci (poniamo) scatta il trigger.
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Static i As Integer If Target.Address = Range("B2").Address Then i = i + 1: Range("B2") = i If i = 10 Then MsgBox "Hai cliccato dieci volte in cella B2!": Range("B2") = 0: i = 0 End SubEdit by VF: il trigger scatta ogni volta che arrivi alla cella B2, sia che ci clicchi col mouse sia che ci passi con la tastiera. Se hai bisogno di qualcosa di diverso, esponi meglio il problema e magari allega uno scenario su cui lavorare.
ciao a tutti
molto simile a quella di vecchio frac, questa la mia versione
Frank
allego file
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim sh As Worksheet Set sh = Sheets("Foglio1") With sh Select Case Target.Address Case Is = "$B$2" Range("b2").Value = Range("b2").Value + 1 '================================ ' arriva fino a 3 click '================================ If Range("b2").Value <= 2 Then MsgBox "ciao" Else MsgBox "ciao, hai cliccato " & Range("b2").Value & " volte sulla cella B2" Exit Sub End If Case Is = "$B$3" MsgBox "arrivederci" End Select End With Set sh = Nothing End SubAllegati:
You must be logged in to view attached files.questa la mia versione
Premesso che cosi è ok, i riferimenti al foglio con la variabile "sh" non sono utilizzati nel codice mostrato, e quindi si possono omettere (il risparmio di memoria e risorse è irrisorio, ma così facciamo anche formazione :P).
-
AutoreArticoli
