Ciao
Il file originale si apre in una decina di secondi direi troppo!
Ho fatto alcune prove rimuovendo gli oggetti e pulsanti ed in effetti il tempo si riduce sul mio Pc W10 Excel 365 Beta 64 Bit
Una ricerca su Ai sui rallentamenti..
1.
Apertura del file
Ogni controllo ActiveX viene
inizializzato dal motore OLE di Windows all'apertura. Con decine/centinaia di oggetti Excel deve:
- Caricare la libreria MSForms.dll per ogni istanza
- Registrare ogni oggetto nel registro OLE
- Allocare memoria separata per ciascuno
Con 50+ oggetti su più fogli l'apertura può rallentare di
secondi o decine di secondi.
2.
Cambio foglio
Ogni volta che si naviga su un foglio con ActiveX, Excel:
- Ridisegna tutti i controlli
- Riattiva il motore VBA per ciascuno
- Riesegue gli eventi _Initialize associati
Questo causa un
freeze visibile durante il cambio scheda.
3.
Dimensione del file
Ogni CommandButton ActiveX memorizza nel file:
- Il binario del controllo OLE
- Le proprietà (colori, font, caption, ecc.)
- Il codice VBA associato
Un singolo pulsante può pesare
5–20 KB. Con 100 pulsanti →
+1–2 MB di overhead.
4.
Calcolo/Refresh
Se il foglio ha Application.Calculation = xlAutomatic, Excel può tentare di
rivalutare le celle con =INCORPORA(...) ad ogni modifica, appesantendo ulteriormente il ciclo di calcolo.
5.
Instabilità e crash
I controlli ActiveX su Excel sono notoriamente instabili, specialmente su:
- File condivisi o su rete
- Excel 32-bit con molti oggetti (limite memoria ~2GB)
- Aggiornamenti di Windows/Office che rompono la registrazione OLE
Soluzione consigliata:
| Situazione | Alternativa |
|---|
| Pulsanti solo per eseguire macro | Usa Form Controls (più leggeri, nessun OLE) |
| Serve interfaccia avanzata | Usa una UserForm unica invece di tanti ActiveX sparsi |
| Navigazione tra fogli | Usa una barra di navigazione su un solo foglio |

I
Form Controls (msoFormControl) sono fino a
10x più leggeri degli ActiveX perché non usano il motore OLE e non hanno overhead di inizializzazione.