Bug quando si incolla la convalida in VBA - Suggerimenti per Excel

Sommario

Se hai letto i primi capitoli di VBA e macro per Microsoft Excel, sai che mi lamento del fatto che il registratore di macro di Excel non fa il massimo lavoro di registrazione del codice utilizzabile. Di solito, il codice funziona bene, ma è registrato in modo tale che potrebbe non essere così utile per set di dati di dimensioni diverse. Il codice potrebbe funzionare bene oggi, ma non domani.

Mi sono imbattuto in un problema davvero strano in cui il registratore di macro ha effettivamente registrato un codice che non funzionava. Stavo scrivendo una macro che ha cercato di copiare la convalida da una cella a un intervallo di celle. In Excel 2002, questo codice era il seguente:

Range(“E5”).Copy Range(“E6:E12”).PasteSpecial Paste:=xlPasteValidation

Questo codice ha funzionato bene in Excel 2002, ma non è riuscito su un computer client con Excel 2000. Uno dei vecchi computer in ufficio ha ancora Excel 2000, quindi ho provato il codice lì. Il problema era con xlPasteValidation. Ogni volta che mi imbatto in qualcosa di insolito, avvio il registratore di macro per vedere come il registratore di macro registrerebbe il codice. Ho impostato la convalida in E5, acceso il registratore di macro, copiato E5 e utilizzato Paste Special - Validation. Dopo aver arrestato il registratore di macro, ho notato che Excel 2000 ha registrato la costante come:

Range(“E6:E12”).PasteSpecial Paste:=xlDataValidation

Quindi, sono andato all'applicazione client, ho cambiato il codice in xlDataValidation e l'ho eseguito di nuovo. Stranamente, ha prodotto lo stesso errore!

Risulta che il registratore di macro di Excel 2000 ha effettivamente un bug. Registrerà la costante xlDataValidation, ma l'interprete macro non riconoscerà né xlDataValidation né xlPasteValidation. La Guida di Excel VBA in Excel 2000 finge che non sia possibile incollare solo le convalide.

Per fare in modo che funzioni, è necessario scoprire il valore sottostante di xlPasteValidation. Sulla mia macchina XL2002, sono andato all'editor VBA. Digita Ctrl + G per aprire la finestra immediata e digita questo nel riquadro immediato:

Print xlPasteValidation

Premi invio ed Excel 2002 ti dirà che xlPasteValidation è un modo amichevole per dire "6". Di nuovo sulla macchina Excel 2000, ho provato questo codice:

Range(“E6:E12”).PasteSpecial Paste:=6

Per fortuna funziona. In realtà sei costretto a utilizzare il valore sottostante invece della costante. Metto in guardia contro questa pratica nel libro in quanto rende il programma davvero difficile da leggere per la prossima persona che guarda il codice. In questo caso particolare, non hai davvero scelta. Aggiungi un commento che spiega perché l'hai codificato in questo modo:

‘Bug in XL2000; need to use “6” instead of the constant Range(“E6:E12”).PasteSpecial Paste:=6

Quindi, la piccola lezione di oggi è il problema molto specifico di come incollare una convalida speciale in Excel 2000, ma la lezione più grande è il lavoro di investigazione richiesto per capire cosa sta succedendo quando accade qualcosa di strano in Excel VBA.

Articoli interessanti...