2011-04-05 25 views
35

¿Cómo puedo obtener la celda desde la que se llama a mi función VBA?celda de Excel desde la que se llama una función

En otras palabras, ¿cuál es el equivalente VBA para INDIRECTO (ROW(), COLUMN())?

Estoy no buscando ActiveCell.

Lo que quiero hacer es tener una función simple ThisRow_Col(rColumn As String) devolver la columna X de la fila desde la que se llama. Diga en B2 I call = ThisRow_Col ("A"), debería devolver el valor de A2. Esto debería funcionar independientemente de qué celda esté activa.

EDITAR: Gracias Carlos por la respuesta: Application.Caller. El código siguiente obtiene la columna X de la fila actual, independientemente de donde la selección es:

Function ThisRow_Col(rColumn As Range) 
    ' Return INDIRECT(rcolumn & ROW()) 

    ThisRow_Col = Application.Caller.Worksheet.Cells(Application.Caller.Row, rColumn.Column).Value 

End Function 

en cuenta que aprobar la columna como un intervalo (ThisRow_Col(A1)) es mejor que pasar como una cadena, porque Excel puede automáticamente actualice las fórmulas si mueve o inserta columnas. Por supuesto, la fila 1 de A1 es solo una convención.

Respuesta

57

Application.Caller devuelve el objeto de rango desde el que se llama la UDF.

+2

Genial, nunca lo supe. +1 – phoog

+2

@dandv, @phoog, aquí hay más detalles sobre Application.Caller: http://stackoverflow.com/questions/3861431/vba-how-to-get-the-last-used-cell-by-vba -code-when-the-last-error-occured-in-aw/3874340 # 3874340 – jtolle

Cuestiones relacionadas