我一直在尝试使用命名范围和变量来定义我想要自动填充的范围,我只能使用其中一个命名范围而不是代码中的变量。 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
答案 0 :(得分:1)
有几个问题,Dim ColLetter As Range
应该是Dim ColLetter As String
,您的字符串连接错误,将Range("Notes_Start:ColLetter" & lastRow)
更改为Range("Notes_Start:" & ColLetter & lastRow)
答案 1 :(得分:0)
使用字母在代码中定义列时要非常小心。
A1
,Mid(ActiveCell.Address, 2, 2)
A$
,这就是你想要的。 AA1
,Mid(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)
但我还是建议使用列号...