Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

[Excel] Loop su macro di Worksheet_SelectionChange

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] Loop su macro di Worksheet_SelectionChange

Postdi mpsinf » 20/11/12 20:34

come faccio ad uscire da questo codice che non mi si ferma più ? con CA1 anche con 1 sola riga ..

Codice: Seleziona tutto
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

With Worksheets("Tabella riassuntiva")

If Range("CA1") <> "" Then

     col = 79  ' corrispondente alla cella CA1
     
     For i = 1 To Cells(Rows.Count, "CA").End(xlUp).Row
       
        myh = Hour(.Cells(i, col))
        myHero = .Cells(i, col + 1).Value
        myExH = Application.Match(myHero, Worksheets("Tabella riassuntiva").Range("A:A"), 0)
        If myHero = "" Then Exit For
           
        If IsError(myExH) Then ' se non c'è nella lista lo inserisce
            myExH = Worksheets("Tabella riassuntiva").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
            Worksheets("Tabella riassuntiva").Cells(myExH, 1).Value = myHero
        End If
            Worksheets("Tabella riassuntiva").Cells(myExH, 3 + myh * 2 + 1 * (.Cells(i, col + 3) = "Automatica")) = _
            Worksheets("Tabella riassuntiva").Cells(myExH, 3 + myh * 2 + 1 * (.Cells(i, col + 3) = "Automatica")) + 1
       
       
        Cells(i, col + 4).Value = myURL
     Next i
 
' copia a fianco per analisi successive
 If Cells(Rows.Count, "CL").End(xlUp).Row > 1 Then spt = 1
  Range("CA1:CE" & Cells(Rows.Count, "CA").End(xlUp).Row).Copy _
  Destination:=Cells(Rows.Count, "CL").End(xlUp).Offset(0 + spt, 0)

  Range("A3:AV" & Cells(Rows.Count, "A").End(xlUp).Row).Select
    Selection.Sort Key1:=Range("B3"), Order1:=xlDescending, Header:=xlNo, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
       
 Range("CA:CE").Clear
 
End If
 
End With

End Sub
XP + Excel 2003 Ita
W7 + Excel 2007 Ita
mpsinf
Utente Senior
 
Post: 168
Iscritto il: 03/09/03 18:33

Sponsor
 

Re: [Excel] Loop su macro di Worksheet_SelectionChange

Postdi Anthony47 » 21/11/12 01:01

Beh, spero che nel frattempo hai risolto...In genere con Esc oppure Contr-Pausa va in debug e si puo' interrompere.

Il quanto all' origine del casino, hai inserito in una macro "di evento" (Worksheet_SelectionChange) una istruzione che ri-crea l' evento [Range("A3:AV" & Cells(Rows.Count, "A").End(xlUp).Row).Select]
Puoi evitare di toccare la selezione, usando ad esempio
Codice: Seleziona tutto
Range("A3:AV" & Cells(Rows.Count, "A").End(xlUp).Row).Sort Key1:=Range("B3"), Order1:=xlDescending, Header:=xlNo, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal

Oppure prudenzialmente usi in testa alla macro di evento
Application.EnableEvents = False e prima dell' uscita (qualsiasi uscita...) Application.EnableEvents = True

Ho sganciato il tuo messaggio dalla discussione titolata "Macro per importazione dati DDE" visto che si tratta di argomento diverso.

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: 13891
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel] Loop su macro di Worksheet_SelectionChange

Postdi mpsinf » 21/11/12 08:19

Anthony47 ha scritto:Beh, spero che nel frattempo hai risolto...In genere con Esc oppure Contr-Pausa va in debug e si puo' interrompere.


Forse quel uscire era meglio che lo mettessi tra ""... si si... fermata :)

Putroppo anche con la tua soluzione del "non SELECT" non funziona..

CON Application.EnableEvents = False invece si...

P.S. pensavo che aprendo un altro topic (anche se in effetti è un po' diverso da quello dove avevo postato) creasse troppo confusione.
Invece che ne pensate di una sezione del "COME SI FA?"...
XP + Excel 2003 Ita
W7 + Excel 2007 Ita
mpsinf
Utente Senior
 
Post: 168
Iscritto il: 03/09/03 18:33

Re: [Excel] Loop su macro di Worksheet_SelectionChange

Postdi Anthony47 » 21/11/12 14:49

Se esegui la macro passo-passo (con F8) potrai individuare il momento in cui la Worksheet_SelectionChange si reinnesca e intervenire in modo mirato.
Usando Application.EnableEvents = False assicurati che non ci sia nessuna uscita dalla macro senza l' esecuzione di Application.EnableEvents = True, altrimenti gli "eventi" restano disabilitati fino alla riapertura di Excel, oppure all' esecuzione in modalita' "Immediata" del comando Application.EnableEvents = True.
Per aprire la "finestra Immediata": Menu /Visualizza /Finestra Immediata (oppure Contr-g).

Per quanto riguarda "Come fare per" in effetti ci sto' lavorando a spizzichi, per inserirci quelle informazioni piu' comuni; non sara' comunque un propedeutico di Excel o del linguaggio vba.

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: 13891
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel] Loop su macro di Worksheet_SelectionChange

Postdi mpsinf » 21/11/12 18:47

Rinvio il codice che ho inserito nel foglio "Tabella riassuntiva"
Codice: Seleziona tutto
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Application.EnableEvents = False
With Worksheets("Tabella riassuntiva")

If Range("CA1") <> "" Then

     col = 79  ' corrispondente alla cella CA1
     
     For i = 1 To Cells(Rows.Count, "CA").End(xlUp).Row
               
        myh = Hour(.Cells(i, col))
        myHero = .Cells(i, col + 1).Value
        myExH = Application.Match(myHero, Worksheets("Tabella riassuntiva").Range("A:A"), 0)
        If myHero = "" Then Exit For
           
        If IsError(myExH) Then ' se non c'è nella lista lo inserisce
            myExH = Worksheets("Tabella riassuntiva").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
            Worksheets("Tabella riassuntiva").Cells(myExH, 1).Value = myHero
        End If
            Worksheets("Tabella riassuntiva").Cells(myExH, 3 + myh * 2 + 1 * (.Cells(i, col + 3) = "Automatica")) = _
            Worksheets("Tabella riassuntiva").Cells(myExH, 3 + myh * 2 + 1 * (.Cells(i, col + 3) = "Automatica")) + 1
     
        Cells(i, col + 4).Value = myURL
     
     Next i
 
' copia a fianco per analisi successive
 If Cells(Rows.Count, "CL").End(xlUp).Row > 1 Then spt = 1
  Range("CA1:CE" & Cells(Rows.Count, "CA").End(xlUp).Row).Copy _
  Destination:=Cells(Rows.Count, "CL").End(xlUp).Offset(0 + spt, 0)

  Range("A3:AV" & Cells(Rows.Count, "A").End(xlUp).Row).Sort Key1:=Range("B3"), Order1:=xlDescending, Header:=xlNo, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
       
 Range("CA:CE").Clear
 
End If
 
End With
Application.EnableEvents = True

End Sub


perchè se faccio una prova e copio da un altro foglio e incollo in cella CA1 funziona, ma se viene eseguito questo codice da altra macro che è su un altro foglio in analisi, mi copia i dati nel foglio "Tabella riassuntiva"
Codice: Seleziona tutto
 For i = 1 To Cells(Rows.Count, "N").End(xlUp).Row
     Cells(i, 15).Value = myURL
  Next i
 Worksheets("Tabella riassuntiva").Range("CA:CE").Value = ActiveSheet.Range("K:O").Value
 Application.DisplayAlerts = False ' per evitare che si fermi per conferma nella cancellazione
 ActiveSheet.Delete
 Application.DisplayAlerts = True

ma quando vado nel foglio "Tabella riassuntiva" mi trovo le colonne copiate senza che siano state analizzate e poi cancellate... questo fino a quando non clicco su una qualsiasi cella del foglio. :-? come mai ?

Mi sa che dovremmo fare una bella disquisizione su questo Worksheets_SelectionChange
XP + Excel 2003 Ita
W7 + Excel 2007 Ita
mpsinf
Utente Senior
 
Post: 168
Iscritto il: 03/09/03 18:33

Re: [Excel] Loop su macro di Worksheet_SelectionChange

Postdi Anthony47 » 21/11/12 22:58

mpsinf ha scritto:Mi sa che dovremmo fare una bella disquisizione su questo Worksheets_SelectionChange

E' presto fatto:
Vba help on line ha scritto:Evento SelectionChange
Si verifica quando cambia la selezione su un foglio di lavoro.

Forse tu avevi in mente un evento di "Worksheet_Change"...
Per un elenco di eventi a livello di worksheet, vedere l' help on line del vba alla voce "Eventi dell'oggetto Worksheet"

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: 13891
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel] Loop su macro di Worksheet_SelectionChange

Postdi mpsinf » 21/11/12 23:21

Ahhh. cavolo e io pensavo che ci fosse solo un comando... Quanto che ho ancora da imparare! Certo che dell'insegnante non mi devo proprio lamentare.
XP + Excel 2003 Ita
W7 + Excel 2007 Ita
mpsinf
Utente Senior
 
Post: 168
Iscritto il: 03/09/03 18:33


Torna a Applicazioni Office Windows


Topic correlati a "[Excel] Loop su macro di Worksheet_SelectionChange":


Chi c’è in linea

Visitano il forum: Nessuno e 12 ospiti