Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

[Excel]Eseguire macro quando vengono selezionate delle celle

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

[Excel]Eseguire macro quando vengono selezionate delle celle

Postdi Marino21 » 13/09/13 08:07

Salve, ho bisogno di una macro in Excel che se sono selezionato in una cella nella colonna B:B esegue la macro altrimenti in una qualsiasi altra colonna non esegue nulla. :)
Marino21
Newbie
 
Post: 7
Iscritto il: 03/07/09 11:29

Sponsor
 

Postdi Dylan666 » 13/09/13 09:26

Provo a dire la mia, ma non sono espertissimo: usi un Worksheet_SelectionChange e controlli se nella selezione c'è l'intervallo che ti interessa:
http://www.globaliconnect.com/excel/ind ... Itemid=475
Avatar utente
Dylan666
Moderatore
 
Post: 38040
Iscritto il: 18/11/03 16:46

Postdi Marino21 » 13/09/13 09:52

l'evento Worksheet_SelectionChange lo sto già usando ma il mio problema è che tipo di domanda devo fare per specificare una colonna quando sono in una cella :(
Marino21
Newbie
 
Post: 7
Iscritto il: 03/07/09 11:29

Postdi Dylan666 » 13/09/13 11:48

Ecco la risposta:

Codice: Seleziona tutto
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 If Selection.Column = 2 And Selection.Count = Rows.Count Then
    MsgBox ("ciao")
  End If
End Sub


il suggerimento viene da qui:
http://www.mrexcel.com/forum/excel-ques ... ected.html

che è il primo risultato di questa ricerca:
https://www.google.it/search?q=vba+chec ... s+selected
Avatar utente
Dylan666
Moderatore
 
Post: 38040
Iscritto il: 18/11/03 16:46

Postdi Marino21 » 13/09/13 12:07

Dylan666 è quello che intendevo :)
Grazie a tutti
Marino21
Newbie
 
Post: 7
Iscritto il: 03/07/09 11:29

Postdi Dylan666 » 13/09/13 13:43

Quindi tu effettivamente volevi che funzionasse solo quando è selezionata TUTTA la colonna B, dico bene?
Perché se deve funzionare quando si seleziona QUALUNQUE intervallo in B diventa così:
Codice: Seleziona tutto
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Selection.Column = 2 Then
    MsgBox ("ciao")
  End If
End Sub
Avatar utente
Dylan666
Moderatore
 
Post: 38040
Iscritto il: 18/11/03 16:46

Postdi Marino21 » 13/09/13 16:46

effettivamente quello che volevo è
If Selection.Column = 2 Then
ma ci sono arrivato da solo dal tuo esempio precedente escludendo la parte successiva :)
ci sarebbe un'altra domanda che magari mi puoi aiutare
in pratica si tratta di un foglio per l'archiviazione digitale dove in una colonna digitando il numero di bolla automaticamente si crea il collegamento al file in pdf che si trovano in una determinata cartella
funziona perfettamente con l'evento Worksheet_SelectionChange ma ho dovuto aggiungere il ritorno alla cella superiore dopo l'invio per creare il collegamento alla stessa cella. A questo punto potrebbe creare un problema nel caso quando digitano il numero del ddt al posto di premere invio col mouse si spostano in una cella differente e di conseguenza il collegamento viene creato a un'altra cella superiore senza n° del ddt :(
hai qualche idea per evitare questo?
Marino21
Newbie
 
Post: 7
Iscritto il: 03/07/09 11:29

Postdi Dylan666 » 13/09/13 17:08

Sto facendo uno sforzo di fantasia, perché purtroppo non riesco bene dedurre cosa stai fecendo e cosa vuoi ottenere.
Comunque userei il SelectionChange sulla prima cella per compilare automaticamente l'altra appena la prima perde il focus.
Se quella che devi compilare è a destra a sinistra, sopra o sotto quella di partenza puoi usare "Offset(0, 0)" per spostarti.
In questo modo se il focus lo perde per uso del mouse o della tastiera il risultato è lo stesso
Avatar utente
Dylan666
Moderatore
 
Post: 38040
Iscritto il: 18/11/03 16:46

Postdi Anthony47 » 14/09/13 00:46

Forse dovresti usare l' evento Worksheet_Change, il cui parametro "Target" indica la cella che ha subito il cambiamento.

Spero che lo spunto sia sufficinte, altrimenti descrivi piu' in dettaglio che cosa devi ottenere.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi Marino21 » 15/09/13 18:21

Scusate è che nel spiegare ho tralasciato dei dettagli, spiego meglio che potrebbe venir utile ad altri :)
Lo scopo è creare l’archiviazione digitale che solitamente vendono come pacchetto aggiuntivo nei gestionali delle aziende ma è possibile ottenere lo stesso risultato con un semplice foglio excel.
A grandi linee nelle aziende gli archivi si suddividono in Offerte, Ordini, DDT, Fatture ed a ogni pratica viene assegnato un numero progressivo, data, riferimento Cliente.
Non sto a spiegare tutti i vantaggi dell’archiviazione digitale rispetto la cartacea per ovvi motivi…
Quindi…
Foglio excel
Nome Colonne:
Nome Cliente | Richiesta d’offerta | Offerta | Ordine Cliente | Conferma d’ordine | DDT | Fattura
Righe:
Nome Cliente (possibilmente Convalidando tutte le celle in elenco per avere sempre lo stesso nome)
Richiesta d’offerta (stampare in PDF in caso di mail , scannerizzare in caso di fax o di richiesta telefonica con il numero progressivo dell’offerta con il suffisso RDO)
Lo stesso per le altre celle con il suffisso diverso in corrispondenza della colonna RDO, OFF, ORC, COR, DDT, FATT.
Nel caso di gestionale scarso nelle ricerche con riferimenti del Cliente a questo foglio è possibile aggiungere ulteriori colonne con riferimenti Cliente e date per una ricerca veloce di tutti i documenti.

e questo è la macro
Codice: Seleziona tutto
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

'Colonna Richiesta d'offerta
If ActiveCell.Column = 1 Then

     ActiveCell.Offset(-1, 0).Range("A1").Select
    ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:= _
        "C:\Archivio" & "RDO" & ActiveCell.Value & ".pdf", TextToDisplay:= _
      ActiveCell.Text
      Exit Sub
    End If
   
'Colonna Offerta
If ActiveCell.Column = 2 Then

     ActiveCell.Offset(-1, 0).Range("A1").Select
    ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:= _
        "C:\Archivio" & "OFF" & ActiveCell.Value & ".pdf", TextToDisplay:= _
      ActiveCell.Text
      Exit Sub
    End If
' e così le altre colonne

End Sub
Funziona solo se premo invio ma l'ideale sarebbe se funzionasse anche se mi sposto col mouse :(
Marino21
Newbie
 
Post: 7
Iscritto il: 03/07/09 11:29

Postdi Anthony47 » 17/09/13 01:58

Nella Sub Workbook_SheetChange il parametro Target indica quale cella ha subito il cambiamento; è questo parametro che devi sfruttare per capire che cosa è successo e dove, invece di ActiveCell.

Cosi' ad esempio, per mettere la stringa "XYZ"nella colonna B quando cambia qualcosa in colonna A potrai usare

Codice: Seleziona tutto
If Target.Column=1 then    'per sondare se il change e' avvenuto in colonna A

Codice: Seleziona tutto
Target.Offset(0,1).Value="XYZ   'per mettere XYZ in colonna B accanto alla cella cambiata


Sono solo esempi da mappare sulla tua situazione, ma è chiaro che Target ti indica il punto esatto di cambiamento, indipendentemente da quale è la nuova cella selezionata.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "[Excel]Eseguire macro quando vengono selezionate delle celle":


Chi c’è in linea

Visitano il forum: Nessuno e 11 ospiti