2017-02-07 44 views
2

我在Excel中具有以下命名範圍。Excel-VBA .Range(「NamedRange」)。行返回一個不同的行然後在範圍位於

enter image description here

我也有下面的代碼與命名工作範圍:

With wsVehicleSummary 

With .Range(.Cells(.Range("VehicleList").Row, 1), .Cells(.Range("VehicleList").Row, .Range("K1").Column)).Offset(1) 
    .PasteSpecial xlPasteValues 
    .Resize(.Range("VehicleList").End(xlDown).Row - .Range("VehicleList").Row, 11).RemoveDuplicates 1, xlYes 
    .Resize(.Range("VehicleList").End(xlDown).Row - .Range("VehicleList").Row, 11).Sort "Veh #", xlAscending, Header:=xlYes 
End With 

問題在刪除重複出現打電話,我已經收窄到下降的事實,.Range("VehicleList").Row相當於40,當它應該是20(如截圖所示)。

我已經在運行時調試這一點,很困惑,爲什麼?.Range("VehicleList").Row被返回的40,而不是20

雖然,我寫這篇文章,我不知道是否有我怎麼叫範圍在用做塊和我如何使用Resize。

任何意見或建議?

+2

您正在將.Range應用於另一個.Range而不是工作表。在開始處將行號存儲在變量中,只是指向該變量。 – Rory

+0

Thanks @Rory。我想我明白你在說什麼。可能在這裏放置一個變量會使它更容易閱讀和維護!有時候我太狡猾了,因爲我自己的好:) –

+0

或者你可以使用'.Parent.Range(' – user3598756

回答

0

感謝@Rory的評論,我做了以下更改,我的代碼現在可以按預期工作。

With wsVehicleSummary 

    Dim lRowResize As Long 
    lRowResize = .Range("VehicleList").End(xlDown).Row - .Range("VehicleList").Row 

    With .Range(.Cells(.Range("VehicleList").Row, 1), .Cells(.Range("VehicleList").Row, .Range("K1").Column)) 
     .Offset(1).PasteSpecial xlPasteValues 
     .Resize(lRowResize, 11).RemoveDuplicates 1, xlYes 
     .Resize(lRowResize, 11).Sort "Veh #", xlAscending, Header:=xlYes 
    End With 
相關問題