【问题标题】:select range in excel macro在excel宏中选择范围
【发布时间】:2020-01-18 11:54:50
【问题描述】:

无法在宏中明确选择范围。 我的数据范围是 B4:N80(数据总是从 B4 开始,它可以上升到任何单元格) 所以我正在创建宏来选择这个范围

LastRow = DSheet.Cells(Rows.Count, 4).End(xlUp).Row
LastCol = DSheet.Cells(2, Columns.Count).End(xlToLeft).Column
Set PRange = DSheet.Cells(4, 2).Resize(LastRow, LastCol)

使用上述代码无法选择从 B4 到“XX”的整个数据

【问题讨论】:

  • 你有什么问题?
  • Rows.countColumns.Count 引用 ActiveSheet,而不是 DSheet,除非它恰好是非活动表。
  • Set PRange = DSheet.Range(DSheet.Cells(4, 2),DSheet.Cells(LastRow, LastCol))PRange.Select
  • 99% 的时间你不需要Select 任何东西。之后你对Selection 做了什么吗?
  • 我正在使用 PRANGE (B4:XX) 作为数据创建枢轴

标签: excel vba range selection


【解决方案1】:

声明所有变量,如果您只是想选择范围,请使用.Select

Sub test()

    Dim LastRow As Long
    Dim LastCol As Long
    Dim PRange As Range
    Dim DSheet As Worksheet

    Set DSheet = ActiveSheet
    LastRow = DSheet.Cells(Rows.Count, 4).End(xlUp).Row
    LastCol = DSheet.Cells(4, Columns.Count).End(xlToLeft).Column
    Set PRange = DSheet.Cells(4, 2).Resize(LastRow, LastCol)
    PRange.Select

End Sub

【讨论】:

  • 尝试了,但只有 B、C、D 列被选中.. 我有多达 Z 列的数据
  • @haribabu 我编辑了它,现在试试。 LastCol 由第 2 行 LastCol = DSheet.Cells(2, Columns.Count).End(xlToLeft).Column 中的值定义,如果您的值直到第 4 行才开始,那会搞砸您的范围。
【解决方案2】:

这对你有用吗?

Sheets("DSheet").Activate
Range("B4").Select
Set PRange = Range(Selection, Selection.End(xlToRight).End(xlDown))

【讨论】:

  • 这应该可行并且实际上是一个好主意。还有一些改进的空间,你可以把它写成Sheets("Dsheet").Range("B4", Sheets("Dsheet").Range("B4").End(xlToRight).End(xlDown)).Select 这应该在一行中完成所有需要的操作。
【解决方案3】:

如果您的目标是选择需要添加的范围

PRange.Select

我也认为你的参数会偏离一点。正确的范围是

Set PRange = DSheet.cells(4, 2).Resize(LastRow - 4, LastCol - 2)

编辑:您的参数将关闭,因为您开始的范围是 B4。因此,例如,如果您的数据下降到 B10,LastRow 将设置为最后一个数据条目的行号,在本例中为 10。现在,如果您想扩大所需范围以包括所有数据条目,则不必将大小调整 10 (LastRow),但调整 6 (LastRow - 4),因为 4 + 6 = 10。在您的示例中,它将是 4 + 10 = 14,这比您的数据条目实际达到的要高。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-15
    • 1970-01-01
    • 2017-10-15
    • 1970-01-01
    • 2015-09-18
    相关资源
    最近更新 更多