2016-04-12 20 views
1

Sütunlardan ikiye (örneğin alfabetik olarak), ardından C sütununa (özel sipariş kullanılarak) iki sütuna göre birkaç sütun içeren bir sayfadaki verileri sıralamaya çalışıyorum "G, D, M, F" - bunlar sütunda görülen tek değerlerdir). Ancak, kodu çalıştırmaya çalıştığımda,Excel'de özel bir sipariş kullanarak sıralama hatası veriyor 1004

1004 - Unable to get the Sort property of the Range class 

hatalarını aldığımda, işte çalışıyorum. İlk olarak bir dizi olarak özel listeler halinde özel sıralama düzenini eklemek zorunda olacak

Range("A2:Y" & lastrow).Sort.SortFields. _ 
Add Key:=Range("C2:C" & lastrow), SortOn:=xlSortOnValues, Order:=xlAscending, _ 
DataOption:=xlSortNormal 
Range("A2:Y" & lastrow).Sort.SortFields. _ 
Add Key:=Range("B2:B" & lastrow), SortOn:=xlSortOnValues, Order:=xlAscending, _ 
CustomOrder:="G,D,M,F", DataOption:=xlSortNormal 
+0

Excel'in hangi sürümünü kullanıyorsunuz? Ayrıca, http://stackoverflow.com/questions/22366188/vba-type-mismatch-on-customorder –

+0

'CustomOrder: =" G, D, M, F ", DataOption: = xlSortNormal' da bu bölüm için geçerlidir. GDMF'nin ayrı ya da tek olarak mı? –

cevap

0

: Daha önce kodda ben

Dim lastrow As Long 
lastrow = Cells(Rows.Count, 2).End(xlUp).Row 

var hatası nereden Öyleyse buraya parçası. Sıralama yaparken iki kere sıralamak zorunda kalacaksınız. İkincil özel sıralama düzenine ve ardından birincil olmayan özel anahtara. Ben senin satırla neler olduğunu tamamen emin değilim

Dim vCOLs As Variant 

vCOLs = Array("G", "D", "M", "F") 

With Application 
    '.ScreenUpdating = False 
    '.EnableEvents = False 
    .AddCustomList ListArray:=vCOLs 
End With 

With Worksheets("sheet2") 
    .Sort.SortFields.Clear 
    With .Cells(1, 1).CurrentRegion 
     'first sort on the secondary custom sort on column B 
     .Cells.Sort Key1:=.Columns(2), Order1:=xlAscending, _ 
        Orientation:=xlTopToBottom, Header:=xlYes, _ 
        OrderCustom:=Application.CustomListCount + 1 
     'next sort on the primary key; column C 
     .Cells.Sort Key1:=.Columns(3), Order1:=xlAscending, _ 
        Orientation:=xlTopToBottom, Header:=xlYes 

    End With 
    .Sort.SortFields.Clear 
End With 

1. Orijinal kod satırda 2'de tür başlar ama bir başlık satırı olsun ya da olmasın hiçbir gösterge verir.

+0

Bu mükemmel çalışıyor, çok teşekkürler. 1. satır gerçekten bir başlık satırı, muhtemelen bundan bahsetmeliydim. – Kierks

İlgili konular