如何在 VBA 中声明 Excel 范围?

How to declare Excel range in VBA?

所以我丢失了所有 VBA 笔记,并且在重做这里的一些逻辑时遇到问题,如果这看起来很基础,我深表歉意。我试图找到设置顶部并找到列中最后填充的单元格并将它们都设置在我的范围内以便能够将其复制并粘贴到日志中。当我到达 MYRANGE 部分时,我得到:

error 1004

我已经尝试使用更基本的选择来实现我想要做的事情,但是原始数据永远不会是相同的大小所以我想回到这个来尝试看看我是否可以获得帮助。

Sub CopyRows()

    Dim sht As Worksheet
    Dim LastRow As Long
    Dim LastColumn As Long
    Dim MYRANGE As Range
    Dim Top, Bottom, Left, Right As Long        

    Set sht = Worksheets("Data")
    sht.Activate

    Set Top = Range("B2")
    LastRow = Cells(Rows.Count, "B").End(xlUp).Select
    Set MYRANGE = Range("Top", "LastRow").Select.Copy

End Sub

正如我提到的,我试图将我的范围设置为 "Top" 和 "Bottom" 或 "LastRow" 这样我就不必担心的实际大小数据并将其复制并粘贴到另一个工作表。

设置范围时不要使用 .Select.Copy

在另一个范围内使用变量范围时不要使用 ""

并且不要使用 .Activate.Select

Sub CopyRows()
    Dim sht As Worksheet
    Dim LastRow As Range
    Dim LastColumn As Long
    Dim MYRANGE As Range
    Dim Top As Range, Bottom As Range, Left As Range, Right As Range

    Set sht = Worksheets("Data")

    Set Top = sht.Range("B2")
    Set LastRow = sht.Cells(Rows.Count, "B").End(xlUp)
    Set MYRANGE = sht.Range(Top, LastRow)
    'Now you can do something with MYRANGE like MYRANGE.Copy
End Sub

general 情况下,Excel 中的范围是用两个单元格或一个单元格定义的。 单个单元格范围的定义需要一个单元格,多个单元格范围.

需要两个单元格

在您的情况下,您需要 Excel 中的两个单元格范围,因此您需要定义范围的左上角单元格和右下角单元格:

下面的代码定义了左上单元格 (startRange) 和右下单元格 (endRange):

然后它定义myRange,作为这两者之间的四边形中的所有单元格:

Sub TestMe()

    Dim wks As Worksheet
    Dim lastRow As Long

    Dim startRange As Range
    Dim endRange As Range
    Dim myRange As Range

    Set wks = Worksheets("Data")
    lastRow = wks.Cells(wks.Rows.Count, "B").End(xlUp).Row

    Set startRange = wks.Range("B2")
    Set endRange = wks.Range("B" & lastRow)

    Set myRange = wks.Range(startRange, endRange)
    Debug.Print myRange.Address
    myRange.Offset(0, 1).Value = myRange.Value

End Sub

代码补充点:

  • 它不使用 .Select.Activate (How to avoid using Select in Excel VBA)
  • 它总是引用范围的父工作表。例如,wks.Range("B2")
  • 代码不会复制单元格,而是获取它们的值并使用 myRange.Offset(0, 1).Value = myRange.Value 将它们写入下一列,如果单元格的样式和格式很重要,那么这可能不是所需要的嗯。