[英]How to use activecell row and column in VBA function with filldown?
[英]VBA Function to find Activecell Table Row
作為學習練習和未來代碼中的可能用途,我創建了我的第一個 Excel VBA 函數來返回任何 Excel 表中的活動單元格行號(與工作表本身相反)。 本質上,它只是在工作表中找到活動行,然后找到表格標題的行號,然后從單元格行號中減去該行號以返回表格的行號,然后可以在后續代碼中使用該行號。 然而,雖然它有效,但它看起來並不是最有效的 誰能改進它?
Sub TableRow()
Dim LORow As Integer
Dim TbleCell As Range
Set TbleCell = Activecell
Call FuncTableRow(TbleCell, LORow)
MsgBox LORow
End Sub
Public Function FuncTableRow(ByRef TbleCell As Range, LORow As Integer) As Range
Dim LOName As String
Dim LOHeaderRow, Row As Integer
LOName = Activecell.ListObject.Name
Row = Activecell.Row
LOHeaderRow = ActiveSheet.ListObjects(LOName).HeaderRowRange.Row
LORow = Row - LOHeaderRow
Debug.Print (LORow)
End Function
這個問題可能會因為不夠具體而被關閉,但最明顯的項目(對我來說)是您對自定義函數的使用。 您的函數實際上沒有返回任何內容,它只是運行調試打印。 要讓您的函數實際返回行號,您可以將其設置為Long
類型( 不是 integer )並將函數名稱=
包含到數字中。
我實際上並沒有測試你的函數,但假設 LORow 是 dubug 打印正確的答案,那么它應該像這樣工作:
Public Function FuncTableRow(ByRef TbleCell As Range, LORow As Integer) As Long
Dim LOName As String
Dim LOHeaderRow, Row As Integer
LOName = Activecell.ListObject.Name
Row = Activecell.Row
LOHeaderRow = ActiveSheet.ListObjects(LOName).HeaderRowRange.Row
LORow = Row - LOHeaderRow
Debug.Print (LORow)
FuncTableRow = LORow
End Function
Call
函數,您可以將其作為自身插入子例程中。LORow
作為輸入變量,但隨后對其進行了更改。 這通常是一種不好的做法。ActiveSheet
從TbleCell.Worksheet
抓取工作表Dim LOHeaderRow, Row As Integer
實際上應該是Dim LOHeaderRow as Long, Row As Long
。 正如您目前擁有的LOHeaderRow
未定義/變體。可能還有更多。 我將通過返回工作表中最后使用的單元格的簡單任務重新啟動您的流程。 有十幾種方法可以做到這一點,還有很多幫助示例。
看看這個TheSpreadsheetGuru 。
以下是一些可能對您有所幫助的變量。
Sub TableVariables()
Dim ol As ListObject: Set ol = ActiveSheet.ListObjects(1)
Dim olRng As Range: Set olRng = ol.Range ' table absolute address
Dim olRngStr As String: olRngStr = ol.Range.Address(False, False) ' table address without absolute reference '$'
Dim olRow As Integer: olRow = ol.Range.Row ' first row position
Dim olCol As Integer: olCol = ol.Range.Column ' first column position
Dim olRows As Long: olRows = ol.Range.Rows.Count ' table rows including header
Dim olCols As Long: olCols = ol.ListColumns.Count ' table columns
Dim olListRows As Long: olListRows = ol.ListRows.Count ' table rows without header
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.