2016-06-09 3 views
1

Ich versuche eine Spalte in absteigender Reihenfolge zu sortieren. Der Code funktioniert einwandfrei, wenn ich durch es gehe, aber wenn das Makro vollständig ausgeführt wird, werden die Daten nicht sortiert. Ich kann nicht herausfinden, warum das passiert. Hier ist das Bit des Codes:VBA - absteigende Sortierung funktioniert nur beim Durchlaufen von Code

Dim temp_str as String 
Dim lrow as Long 
Dim DOX_Net_Lvl_Col_Loc as Long 
Dim DOX_ws as WorkSheet 
Set DOX_ws = ThisWorkbook.Sheets("DOX") 

' Sort Netting Level in descending order 
With DOX_ws 
    .Activate 
    temp_str = ConvertToLetter(DOX_Net_Lvl_Col_Loc) 
    .Range(temp_str & "1:" & temp_str & lrow).Sort _ 
     Key1:=.Range(temp_str & "1"), Order1:=xlDescending 
End With 

Function ConvertToLetter(ColNo As Long) As String 
    ConvertToLetter = Split(Cells(, ColNo).Address, "$")(1) 
End Function 

Offensichtlich ist dies nur ein Ausschnitt des gesamten Codes. Ich habe bereits bestätigt, dass lrow und temp_str korrekt berechnet werden. Außerdem habe ich beim Testen des Codes bestätigt, dass .Range(temp_str & "1:" & temp_str & lrow).Select den gesamten Bereich erfasst, den ich sortieren möchte. Was könnte verhindern, dass der Code während einer vollständigen Ausführung des Makros funktioniert?

Um ein wenig mehr Kontext zu geben, wird das Sub (nennen wir es "DOX") zum Füllen der Datei/Sortieren der Spalte nur von einem anderen Sub aufgerufen (nennen wir es "Master"). Wenn ich den DOX-Sub-Befehl selbst ausführe, funktioniert die Sortierung einwandfrei. Ich benutze Excel 2010.

+0

Ich testete den Code und läuft gut (mit Debugger und rannte alleine). Das einzige, woran ich denken kann, ist, wenn aus irgendeinem Grund Reste von einem anderen Sub übrig sind (da du sagst, dass es heißt). Ein Autofilter, der möglicherweise interferiert (setzen .AutoFilterMode = False nach. Activate DOX_ws Blatt) oder Blattschutz für Filter. – Sgdva

+0

Versuchen Sie, die 'Zellen' in 'ConvertToLetter' zu' teilen'? – findwindow

+0

Kein Glück auf '.AutoFilterMode = False', immer noch unsortiert, wenn der Master-Sub-Befehl ausgeführt wird. Die "ConvertToLetter" -Funktion funktioniert einwandfrei - sie gibt zurück, was erwartet wird ("K" in diesem Fall). – kschindl

Antwort

2

Ich habe eine Lösung gefunden. Wenn ich den Bereich auf .Range("A1:" & temp_str & lrow).Sort ändere, dann funktioniert es. Ich denke, es brauchte die ganze Bandbreite der Daten, um die Sortierung durchzuführen; nur die Spalte zu geben, war offensichtlich nicht genug.

+0

lololol XD Gute Arbeit^__ ^ – findwindow

Verwandte Themen