作為學習練習和未來代碼中的可能用途,我創建了我的第一個 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
uj5u.com熱心網友回復:
這個問題可能會因為不夠具體而被關閉,但最明顯的專案(對我來說)是您對自定義函式的使用。您的函式實際上沒有回傳任何內容,它只是運行除錯列印。要讓您的函式實際回傳行號,您可以將其設定為型別Long(不是整數)并將函式名稱包含=在數字中。
我實際上并沒有測驗你的函式,但假設 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 - 您幾乎永遠不會使用 activecell 作為自定義公式的一部分。
Dim LOHeaderRow, Row As Integer其實應該是Dim LOHeaderRow as Long, Row As Long。正如您目前所擁有的那樣,它LOHeaderRow是未定義的/變體。
可能還有更多。我將通過回傳作業表中最后使用的單元格的簡單任務重新啟動您的流程。有十幾種方法可以做到這一點,還有很多幫助示例。
uj5u.com熱心網友回復:
看看這個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
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/346058.html
