Ava*_*vax 3 excel vba function
我需要编写一个函数来实际上从一些不同的工作表中获取动态范围,而不是在每个宏中重复以下代码:
LastRow = Sheetname.Cells(Rows.Count, 1).End(xlUp).Row
Set UserRange = Sheetname.Cells.Range("A2:A" & LastRow)
Run Code Online (Sandbox Code Playgroud)
我喜欢有如下功能:
Function GetRange(ByVal sht As Worksheet, rng As Range)
'do things ...
End Function
Run Code Online (Sandbox Code Playgroud)
但我不知道如何将范围传递给函数。
如果要使用动态结束行确定返回 Range 对象,除了使用最后一行方法之外,您还需要将函数返回指定为 Range 对象,并传递要使用的起始行变量和列号。
Option Explicit
Public Sub test()
Dim ws As Worksheet, rng As Range
Set ws = ThisWorkbook.Worksheets("Sheet1")
Set rng = GetRange(ws, 1, 1)
Debug.Print rng.Address
End Sub
Public Function GetRange(ByVal ws As Worksheet, ByVal startRow As Long, ByVal columnNumber As Long) As Range
With ws
Set GetRange = Range(.Cells(startRow, columnNumber), .Cells(.Cells(.Rows.Count, columnNumber).End(xlUp).Row, columnNumber))
End With
End Function
Run Code Online (Sandbox Code Playgroud)
您可能需要一些错误处理/测试,确定确定的结束行不小于例如startRow3lastRow和startRow= 4
Option Explicit
Public Sub test()
Dim ws As Worksheet, rng As Range
Set ws = ThisWorkbook.Worksheets("Sheet1")
Set rng = GetRange(ws, 4, 1)
If Not rng Is Nothing Then Debug.Print rng.Address
End Sub
Public Function GetRange(ByVal ws As Worksheet, ByVal startRow As Long, ByVal columnNumber As Long) As Range
Dim lastRow As Long
With ws
lastRow = .Cells(.Rows.Count, columnNumber).End(xlUp).Row
If Not lastRow < startRow Then
Set GetRange = .Range(.Cells(startRow, columnNumber), .Cells(lastRow, columnNumber))
End If
End With
End Function
Run Code Online (Sandbox Code Playgroud)