使用命名范围和variables来定义一个范围

我一直在尝试使用命名的范围和variables来定义我想要自动填充的范围,我只能得到一个命名的范围工作,而不是我的代码中的variables。 ColLettervariables是什么给我麻烦。 如果我省略了这个variables,只是把"AR"放在代码工作范围内,那么它就不是dynamic的。

 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 

Dim ColLetter As Range应该是Dim ColLetter As String ,你的string连接是错误的,将Range("Notes_Start:ColLetter" & lastRow)改为Range("Notes_Start:" & ColLetter & lastRow)

请谨慎使用字母来定义代码中的列。

  • 如果您的活动单元格是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) 

但我仍然build议使用列号…