Excel-VBA .Range(“NamedRange”)。行返回不同的行然后返回范围

时间:2017-02-07 16:36:55

标签: excel vba excel-vba

我在Excel中有以下命名范围。

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。

虽然,在我写这篇文章时,我想知道它是否与我在With块中调用范围以及如何使用Resize有关。

有任何建议或想法吗?

1 个答案:

答案 0 :(得分: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