vba - Excel-VBA .Range ("NamedRange").Row 返回不同的行然后范围所在的位置

标签 vba excel

我在 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

问题出现在 Remove Duplicates 调用中,我已将其范围缩小到 .Range("VehicleList").Row等于 40,而它应该是 20(如屏幕截图所示)。

我已经在运行时调试了这个,我很困惑为什么 ?.Range("VehicleList").Row返回 40 而不是 20。

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

有什么建议或想法吗?

最佳答案

感谢 @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

关于vba - Excel-VBA .Range ("NamedRange").Row 返回不同的行然后范围所在的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42095249/

相关文章:

excel - 如何在vba中查找一组数据的该月的第一个日期

java - iText 从 PDF 中删除 protected View

excel - 基于excel中第一行值的单元格行范围到列

vba - 添加多个工作表,命名它们,并将粘贴动态范围复制到新工作表中

excel - 为范围内的每个单元格返回 "too low"、 "too high"或 "OK"的函数

vba - VBA中 'Range.Parent'和 'Range.Worksheet'有什么区别?

excel - 如何打开指定其路径的工作簿

vba - 将邮件格式更改为 html 时如何获取 UI 行为?

excel - 我怎样才能使这段代码不那么复杂?

excel - 从 Excel 2011 创建 Word 文件