use*_*386 3 excel vba rows excel-vba
在Excel中使用VBA:
我有很多表有多个表.这些表的唯一共同点是ProductID列和LotNumber列.需要验证和/或操作Products ID列中的数据.我需要一种方法来获取当前所选单元格的当前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
Run Code Online (Sandbox Code Playgroud)
任何帮助都会受到欢迎.
这使用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
Run Code Online (Sandbox Code Playgroud)