2017-08-09 1 views
0

J'ai consulté ce MSDN page pour en savoir plus sur le tri avec plusieurs champs de tri. Il dit essentiellement de numéroter vos clés et de les mettre à égalité avec le champ de tri. Je souhaite parcourir en boucle un tableau d'entiers de taille N pour trier une plage par les valeurs du tableau. Par exemple, si ma feuille a 100 colonnes de données, je pourrais vouloir trier basé sur les colonnes 3,18 et 62; SOn serait 3. Le problème est que je ne peux pas nommer les clés de tri "key" & i comme i boucles de 1 à N.Tris imbriqués dynamiques à l'aide d'Excel VBA

Ce que j'ai jusqu'à présent:

With Worksheets("SalesRep").Sort 
    .Header = xlYes 
    .MatchCase = False 
    .Orientation = xlTopToBottom 
    .SortMethod = xlPinYin 
    for i=1 to myArrayLength 
     SortFields.Add Key:=Range(cells(1,colNumArray(i)).address,cells(lastRow,colNumArray(i)).address) 
    next i 
    .Apply 
End With 

Que recommandez-vous?

+0

@TimWilliams ajouté. J'ai utilisé des noms génériques pour plusieurs variables, mais je pense que c'est clair. Fondamentalement, après avoir bouclé chaque valeur dans mon tableau, j'applique ensuite le champ de tri. – wizlog

+0

Et que se passe-t-il lorsque vous exécutez cela? –

+0

Pas de message d'erreur, mais il ne trie pas. J'ai cherché des moyens de déterminer les champs de tri appliqués en utilisant la fenêtre immédiate, mais je suis revenu les mains vides. – wizlog

Répondre

2

Essayez quelque chose comme:

Dim sht As WorkSheet 

Set sht = .Worksheets("SalesRep") 

With sht.Sort 
    .SortFields.Clear '<<<<< clear any previous 
    .Header = xlYes 
    .MatchCase = False 
    .Orientation = xlTopToBottom 
    .SortMethod = xlPinYin 
    for i=1 to myArrayLength 
     SortFields.Add Key:=sht.Range(sht.cells(1,colNumArray(i)), _ 
            sht.cells(lastRow,colNumArray(i))) 

     'maybe cleaner as 
     'SortFields.Add Key:=sht.Cells(1, colNumArray(i)).Resize(lastRow, 1) 
    next i 
    .Apply 
End With 

Vous n'avez pas besoin .Address dans votre référence de plage, mais vous avez besoin d'ajouter le qualificatif de feuille de calcul ou votre code échouera quand une autre feuille est active.

+0

Je n'avais pas réalisé que je devais re-référencer la feuille dans ma gamme référencée. Je vous remercie. – wizlog