Läs på engelska

Dela via


VBA-kod skriver långsamt till celler när många ActiveX-kontroller är osynliga i Excel 2016

Symptom

Tänk dig följande situation:

  • Du arbetar i Excel för Microsoft 365, Excel 2016 eller en senare version.
  • Ett kalkylblad innehåller många ActiveX-kontroller som är inställda på att vara osynliga.
  • Du har VBA-kod som skriver många formler till celler.

I det här scenariot skriver Excel mycket långsamt till cellerna när du kör VBA-koden.

Exempel

  1. Skapa 105 ActiveX-kontroller som alternativknappar i ett Excel 2016 kalkylblad.

  2. Ange egenskapen Visible för alternativknapparna till Falskt.

  3. Kör följande VBA-kod:

    VB
    For row = 1 To 20000
    
        For col = 1 To 5
           Cells(row, col).Formula = "=Func()"
        Next
    Next
    

Du märker att den här koden körs mycket långsammare än i tidigare versioner av Excel.

Orsak

Det här problemet uppstår på grund av en designändring i Excel. På grund av den här ändringen inträffar följande beteende när VBA-kod skriver en formel till en cell:

  • Excel gör osynliga ActiveX-kontroller synliga.
  • VBA-koden skriver en formel till en cell.
  • Excel gör ActiveX-kontrollerna osynliga igen.

Lösning

Använd någon av följande metoder för att lösa problemet:

  • Granska koden och arkitekturen och utvärdera om du behöver så många ActiveX-kontroller som du har.
  • Ersätt ActiveX-kontrollerna med Formulärkontroller i berörda arbetsböcker.
  • Gör activex-kontrollerna tillfälligt synliga när koden körs.

Anteckning

Om det finns många formobjekt i kalkylbladet kan VBA-koden fortfarande köras långsamt när du har använt lösningarna. I det här fallet tar du bort formobjekten.

Status

Microsoft har bekräftat att detta är ett problem i de produkter som anges i avsnittet "Gäller för".