3

在 Excel 中使用 VBA:

我有很多表有多个表。这些表的唯一共同点是 ProductID 列和 LotNumber 列。Products ID 列中的数据需要验证和/或操作。我需要一种方法来获取当前选定单元格的当前表的表行索引号。我不能使用 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

欢迎任何帮助。

4

2 回答 2

6

这使用 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
于 2012-09-29T15:21:25.117 回答
1

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

ActiveCell.Row - ActiveCell.CurrentRegion.Row + 1

为您提供当前表中活动单元格的(基于 1 的)行号

于 2012-09-29T15:11:30.507 回答