需要使用VBA在Excel中的表中返回行值。 可以是任何表格,在工作表上不能使用activecell的地方

在Excel中使用VBA:

我有很多表有多个表。 这些表唯一的共同点是ProductID列和LotNumber列。 “产品ID”列中的数据需要进行validation和操作。 我需要一种方法来获得当前所选单元格的当前TABLE表格行索引号。 我无法使用ActiveCell引用,因为表格行与表格行不匹配。 我不能使用查找列中最后使用的单元格,因为在其他表中。

我需要能够在许多不同的工作簿中使用这个子。

这是我到目前为止的代码。

Const tblUNLABELED As String = "tblUnLabel" Private Sub Worksheet_SelectionChange(ByVal Target As Range) StopAppEvents Dim ws As Worksheet Set ws = ActiveSheet Dim intRow As Integer Dim strTest As String If Not Intersect(ActiveCell, _ ActiveSheet.Range(tblUNLABELED & "[LotNumber]")) Is Nothing Then 'go to the product entered in this table row and Ucase(ProductID) strTest = ws.ListObjects(tblUNLABELED).Range(intRow, "[ProductID]") ws.ListObjects(tblUNLABELED).Range(intRow, "[ProductID]") = UCase(strTest) End If RestartAppEvents End Sub 

任何帮助将受到欢迎。

这使用Range的ListObject属性来告诉你ActiveCell所在的表的列名和行号。如果ActiveCell不在表中,你会得到一个消息。 行号为0意味着ActiveCell位于表格的标题行中:

 Sub PrintActiveCellTableData() Dim cell As Excel.Range Dim lo As Excel.ListObject Dim loCol As Excel.ListColumn Dim loRowNum As Long Set cell = ActiveCell If cell.ListObject Is Nothing Then Debug.Print "No ActiveCell ListObject" Exit Sub End If Set lo = cell.ListObject With lo Set loCol = .ListColumns(cell.Column - (.HeaderRowRange.Cells(1).Column) + 1) loRowNum = cell.Row - .HeaderRowRange.Row End With Debug.Print "Table Name: "; lo.Name; " ListColumn: "; loCol.Name; " Row:"; loRowNum End Sub 

如果所选的单元格在你的表格之一内,并且你的表格是以空单元格为界的,那么ActiveCell.CurrentRegion应该给你一个包含表格的范围,你可以从那里开始工作。

ActiveCell.Row – ActiveCell.CurrentRegion.Row + 1

为您提供当前表格中活动单元格的(从1开始的)行号