使用命名范围和变量来定义范围

时间:2015-03-30 15:51:26

标签: excel vba excel-vba

我一直在尝试使用命名范围和变量来定义我想要自动填充的范围,我只能使用其中一个命名范围而不是代码中的变量。 ColLetter变量给我带来了麻烦。如果我省略了该变量并将"AR"放在代码工作的范围内,那么它就不是动态的。

Sub test()

    Dim lastRow As Long
    Dim ColLetter As Range
         lastRow = Range("D" & Rows.Count).End(xlUp).row 'Counts rows in specific column which controls how far to autofill.
         ColLetter = Mid(ActiveCell.Address, 2, 2)
         'Range("Notes_Start").AutoFill Destination:=Range("Notes_Start:AR" & lastRow) 'This works just is not dynamic.  The AR for column is static.
         Range("Notes_Start").AutoFill Destination:=Range("Notes_Start:ColLetter" & lastRow)
End Sub

2 个答案:

答案 0 :(得分:1)

有几个问题,Dim ColLetter As Range应该是Dim ColLetter As String,您的字符串连接错误,将Range("Notes_Start:ColLetter" & lastRow)更改为Range("Notes_Start:" & ColLetter & lastRow)

答案 1 :(得分:0)

使用字母在代码中定义列时要非常小心。

  • 如果您的有效单元格为A1Mid(ActiveCell.Address, 2, 2)
    • 产生A$,这就是你想要的。
  • 如果您的有效单元格为AA1Mid(ActiveCell.Address, 2, 2)
    • 收益AA。您丢失了$并且您的引用已被破坏。

使用对列的数字引用可能会更好:

Dim Col as integer
Col = ActiveCell.column

我不熟悉Range("Notes_Start:..."语法,但我相信您可以使用Range("Notes_Start").Offset(lastrow,Col)来获取您之后的内容。 Offset()可能需要+1或-1的调整才能准确调整到您需要的位置。一些快速试用&错误将准确显示您需要做什么。

您可以使用:

Dim adr() as string
Dim ColLetter as string
adr = split(ActiveCell.Address, "$")
ColLetter = adr(0)

但我还是建议使用列号...