El uso de VBA en Excel:

Tengo muchas hojas que tienen varias tablas. La única cosa que estas tablas tienen en común es una columna ProductID y LotNumber columna. Los datos de los Productos de IDENTIFICACIÓN de columna debe ser validado y /o manipulado. Necesito una manera de obtener la Fila de la Tabla el número de Índice de la TABLA actual de la celda seleccionada actualmente. No puedo usar ActiveCell de referencia debido a que las filas de la tabla no coinciden con las filas de hoja. No puedo utilizar la función de búsqueda de la última celda utilizada en una columna, porque hay otras tablas en el camino.

Necesito para poder utilizar esta sub en muchos libros diferentes.

Este es el código que tengo hasta ahora.

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

Cualquier ayuda sería bienvenida.

  • .offset no va a funcionar porque hay muchas mesas y no todas las tablas tienen el mismo número de columnas entre LotNumber y ProductID
InformationsquelleAutor user1708386 | 2012-09-29

2 Comentarios

  1. 5

    Este utiliza la Gama del ListObject Propiedad de decirle el nombre de la columna y el número de fila de la tabla que ActiveCell es en. Si el ActiveCell no está en una mesa en la que aparece un mensaje que dice así. Un número de fila de 0 significa que el ActiveCell se encuentra en la tabla la fila de encabezado:

    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
    • Doug Esto es justo lo que necesitaba gracias.
    • El uso de Dougs ejemplo aquí es lo que he venido para arriba con. Funciona como un encanto.
  2. 1

    Si la celda seleccionada se encuentra dentro de uno de sus tablas y sus mesas están delimitadas con celdas vacías, a continuación, ActiveCell.CurrentRegion debe darle a usted una gama que abarca la mesa, y usted puede trabajar desde allí.

    ActiveCell.Fila ActiveCell.CurrentRegion.Fila + 1

    le da la (1) basado en el número de fila de la celda activa dentro de la tabla actual

    • Charles me podría dar un ejemplo de cómo utilizar CurrentRegion para fijar el punto de la celda de la fila.
    • ver editar el post
    • Gracias Carlos, este parece que va a ser muy útil.

Dejar respuesta

Please enter your comment!
Please enter your name here