我有一个excel宏,它可以很好地满足我的需要,但是设置为特定的列;这意味着为了为不同的列运行它,我必须编辑宏以指向新列,或者使宏的多个副本都指向不同的列。我目前的解决方案如下:
Dim rng As Range
Dim Lastrow As Integer
Lastrow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
Set rng = Range("J2:J" & Lastrow)
我希望能够将宏看起来的范围设置为依赖于我运行宏的点上的活动列或单元格,所以有以下几点:
Set rng = Range("Activecolumn2 : activecolumn" & Lastrow)
我对编码非常陌生,所以如果有人能够解释他们的答案(或者我能提供的任何信息以帮助我们得到答案),那将非常有用!
答案 0 :(得分:2)
没有活动列。但您可以使用ActiveCell.Column
获取活动单元格的列。
Set Rng = Range(Cells(2, ActiveCell.Column), Cells(lastrow, ActiveCell.Column))
另请注意,您需要定义Dim Lastrow As Long
而不是Integer
,因为Excel的行数多于Integer
可以处理的行数。建议在VBA中使用always to use Long instead of Integer,因为使用Integer
没有任何好处。
答案 1 :(得分:0)
您可以使用以下代码
Dim rng As Range
Dim Lastrow As Long
Dim activeCol As Long
activeCol = ActiveCell.Column
Lastrow = ActiveSheet.Cells(Rows.CountLarge, activeCol).End(xlUp).Row
With ActiveSheet
Set rng = .Range(.Cells(2, activeCol), .Cells(Lastrow, activeCol))
End With
答案 2 :(得分:0)
使用程序参数:
Sub YourMacro(strColumn As String)
'...
Dim rng As Range
Dim Lastrow As Integer
Lastrow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
Set rng = Range(strColumn & "2:" & strColumn & Lastrow)
'...
End Sub
这样称呼:
Call YourMacro "J"
'Or
Call YourMacro "AI"