2013-06-20 5 views
3

dans une plus grande application Excel, (25 feuilles, 50 boutons de commande, 5000 lignes de code, 18 userforms ... taille 12 Mo) ... nous chargeons des tables à partir d'un serveur en tant que fichiers txt et reconvertir ces txt_files pour exceler les données avec la procédure standard. Par macro, nous supprimons toutes les requêtes et connexions après les téléchargements.vba excel connexions tables de requête supprimer

Tout a fonctionné parfaitement et rapidement, mais la feuille principale devient plus lente et plus lente maintenant. Même l'ouverture du classeur prend de plus en plus de temps, tandis que la taille reste constante.

D'une certaine façon j'ai le sentiment, il y a des restes de transfert de données à partir des txt_files qui ne sont pas supprimés avec:

#
Dim ws As Worksheet 
Dim qt As QueryTable 
For Each ws In ThisWorkbook.Worksheets 
For Each qt In ws.QueryTables 
qt.Delete 
Next qt 
Next ws 

If ActiveWorkbook.Connections.Count > 0 Then 
For i = 1 To ActiveWorkbook.Connections.Count 
ActiveWorkbook.Connections.Item(1).Delete 
Next i 
EndIf 
#

Il n'y a pas de formules dans le classeur. Le ralentissement persiste, même en sélectionnant toutes les cellules de la main_sheet + effacer ... Je suppose que toutes les cellules sont vides après cette commande ...

Dans les 24 autres feuilles il n'y a pas speed_problems (même filtrer une liste 850.000 x 33)

Une idée de comment vérifier ce qui ralentit le classeur dans la feuille principale? Existe-t-il des commandes de nettoyage plus puissantes, supprimant les requêtes et les connexions? Existe-t-il des méthodes pour consigner ce que fait exceller, alors qu'il ne retourne pas la commande?

+0

je lu quelque part que commençant par Excel 2007, vous devez traiter QueryTable au sein de chaque ActiveSheet.ListObjects – Antony

+0

Si vous essayez d'effacer le main_sheet, vous devez sélectionner tous et sur votre clavier et appuyez sur (Control & -) c'est la touche Ctrl et tout en la maintenant enfoncée, appuyez sur la touche moins sur votre pavé numérique, cela devrait supprimer toutes les cellules, et pas seulement effacer le contenu, libérant ainsi de la mémoire ... – Xabier

Répondre

0

Essayez ceci:

ActiveSheet.UsedRange.EntireRow.Delete 

Vérifiez aussi dans les rangs de Formule/nommés comme avec toutes les tables ListObject nouvelle plage nommée est ajouté.

Sub DeleteAllNamedRanges() 
Dim NR As Name 
For Each NR In Application.ActiveWorkbook.Names 
    NR.Delete 
Next 
End Sub 
Questions connexes