2013-04-16 16 views
6

Ecco cosa devo fare: quando ho scritto qualcosa in una cella nel foglio, il mio codice Worksheet_Change dovrebbe verificare se la cella contiene determinati caratteri e quindi sostituire quei caratteri. Quella parte del codice sta funzionando bene.Copia-incolla non attiva worksheet_change

Tuttavia, c'è un comportamento un po 'strano. Ecco il codice finora:

Private Sub Worksheet_Change(ByVal Target As Range) 
     Target.Value = Replace(Target.Value, "ß", "ß") 

     MsgBox "This is the value: " & Target.Value 
    End Sub 

Quello che sta succedendo è che quando ho i caratteri che hanno bisogno di essere cambiato nella mia appunti (usando Ctrl +C). Quando faccio doppio clic sulla cella, incolla i caratteri nella cella utilizzando Ctrl + V, quindi premi Invio, il codice funziona perfettamente, i caratteri vengono modificati. (Nota: senza il doppio clic, non è possibile vedere il cursore.)

Tuttavia, se solo vado in cella con i miei tasti freccia e incollo su qualsiasi altra cosa nella cella, non succede nulla. Sospetto che lo Worksheet_Change non sia nemmeno attivato, altrimenti visualizzerebbe almeno il mio MsgBox.

(non so se è rilevante per questo, ma io sto usando Excel 2010 in Mac)

+2

Se si copia e incolla un valore da * entro * Excel, fa il fuoco evento '_Change'? [Questa discussione] (http://answers.microsoft.com/en-us/mac/forum/macoffice2011-macexcel/worksheetchange-not-firing-on-paste/a1cd9b4a-1541-4988-83ef-1c9903f7cb33?msgId=9a4dac82 -69dc-4655-9106-eb5f8d4e388e) suggerisce che c'è un bug in Excel per Mac, se si incolla da un'altra applicazione, l'evento '_Change' non si attiva. –

+3

Yup @DavidZemens. Hai ragione. È un bug Excel2011. Tuttavia, non sono stato in grado di testarlo per Excel2010 su Mac. –

+0

Nessun evento _Change non viene attivato neanche. Quindi sembra essere un bug? – flamingo

risposta

0

Utilizzare sempre proprietà EnableEvents quando si lavora con eventi Worksheet_Change. Per maggiori dettagli link

Private Sub Worksheet_Change(ByVal Target As Range) 

On Error GoTo err_rout 


    Application.EnableEvents = False 

    If Target.Count > 1 Then Exit Sub 

    Target.Value = Replace(Target.Value, "ß", "ß") 

    MsgBox "This is the value: " & Target.Value 

err_rout: 
    Application.EnableEvents = True 
End Sub 

enter image description here

+0

Grazie mille, ma sfortunatamente non funziona neanche.Ancora lo stesso comportamento. – flamingo

+0

@flamingo Spero che tu abbia incollato il codice nella sezione del codice del foglio di lavoro. – Santosh

+0

Immagino tu intenda la finestra con le caselle a tendina in cui seleziono il foglio di lavoro a sinistra e poi la funzione Cambia a destra? L'editor di Visual Basic? (Scusa, il mio excel è in tedesco :) Sì, ho inserito il codice nella sezione di codice di quella finestra con i due menu a discesa. – flamingo

1

È possibile utilizzare Worksheet_Calculate su un foglio di attivazione.

  • creare un nuovo foglio che contiene solo un collegamento alla gamma che si desidera guardare (cioè = Foglio1! A1: B3)
  • Aggiungere una macro denominata Worksheet_Calculate al foglio grilletto
  • Ora ogni volta qualsiasi data nell'intervallo collegato viene attivato un ricalcolo del foglio di trigger che imposta la macro

Questo funziona anche quando l'utente immette una formula nella cella corrispondente e una delle modifiche precedenti.

Con il calcolo manuale il ricalcolo del foglio di trigger e la macro si verificano solo quando l'utente preme F9.

0
If Target.Column = 3 Then 
    Dim startRow As Integer 
    Dim endRow As Integer 
    startRow = Target.Row 
    endRow = Target.Row + Target.Count - 1 

    For i = startRow To endRow 
     ' blah blah blah 

forse aiuta

+0

@DigitalTrauma, fare attenzione quando si formatta il codice. Hai lasciato i tag '
' – gunr2171

+0

@ gunr2171 - oops mi dispiace per quello. Immagino che la modifica dal telefono non sia l'idea migliore. : - / –

Problemi correlati