Kevin tiene un libro de trabajo que contiene 36 hojas de trabajo. Necesita tener el nombre de la hoja de trabajo presente en una celda de esa hoja de trabajo. Ha creado una función definida por el usuario que devuelve el nombre de la hoja de trabajo, pero devuelve el mismo nombre en las 36 hojas de trabajo: el nombre de cualquier hoja de trabajo que se muestra cuando se ejecuta la función definida por el usuario. Se pregunta si hay una macro, en forma de función definida por el usuario (UDF), que pueda usar y que siempre devolverá el nombre de la hoja en la que se usa la función. En otras palabras, en su libro de trabajo de 36 hojas de trabajo, debería devolver 36 resultados diferentes, dependiendo de la hoja de trabajo en la que se use.

La respuesta corta es sí, hay una manera. De hecho, hay un par de formas. Y, curiosamente, no tiene que usar una macro o una función si no lo desea. Por ejemplo, aquí hay una fórmula de hoja de trabajo normal que funcionará en cualquier celda de la hoja de trabajo:

=MID(CELL("filename",A1),FIND("]",CELL("filename",A1))+1,255)

La instancia de la función CELDA en esta fórmula devuelve el nombre completo de la hoja de trabajo, incluidos el nombre y la ruta del archivo. El uso de la función ENCONTRAR da como resultado la eliminación de todo excepto el nombre de la hoja de trabajo.

Tenga en cuenta el uso de una referencia de celda (A1) en cada instancia de la función CELDA. Esto obliga a la función CELDA a devolver el nombre de la hoja de trabajo que contiene la referencia de celda. Sin él, obtendrá el mismo resultado (la primera hoja de trabajo) para cada instancia de la fórmula.

También debe saber que la fórmula no devolverá resultados válidos si la usa en un libro nuevo, uno que no se haya guardado. Debe guardar el libro de trabajo para que realmente tenga un nombre que la función CELL pueda devolver correctamente. Tampoco funcionará correctamente si el nombre del libro o la hoja de trabajo contiene un carácter de corchete derecho («]»). En ese caso, querrá usar una de las otras soluciones discutidas en este consejo.

Si prefiere usar una función definida por el usuario, puede probar algo simple, como esta función:

Function TabName1() As String     Application.Volatile     TabName1 = ActiveSheet.Name End Function

Sin embargo, esta función no proporcionará el resultado deseado porque siempre devuelve el nombre de la hoja de trabajo activa. Eso significa que si tiene la función llamada en cada una de las hojas de su libro de trabajo, siempre devolverá el nombre de la hoja activa en cada una de esas hojas de trabajo, en lugar del nombre de la hoja en la que se usa la función. La siguiente función proporciona mejores resultados:

Function TabName2() As String     Application.Volatile     TabName2 = Application.Caller.Parent.Name End Function

Si cree que querrá usar la función para hacer referencia a un nombre de hoja de trabajo en otra parte del libro de trabajo, esta función funcionará mejor para usted:

Function TabName3(cell As Range)

TabName3 = cell.Worksheet.Name End Function

Esta versión de la función requiere que proporcione una referencia de celda, cualquier referencia de celda, a una celda de la hoja de trabajo cuyo nombre desea usar.

Por supuesto, si prefiere no utilizar una función definida por el usuario, puede simplemente crear una macro que incluya el nombre de cada pestaña de la hoja de trabajo en la misma celda de cada hoja de trabajo. Por ejemplo, la siguiente macro recorre cada una de las hojas de trabajo en el libro de trabajo y coloca el nombre de cada hoja de trabajo en la celda A1.

Sub TabName4()

For J = 1 To ActiveWorkbook.Sheets.Count         Sheets(J).Cells(1, 1).Value = Sheets(J).Name     Next End Sub

Debe tener en cuenta que este enfoque no es dinámico (debe volver a ejecutarlo cada vez que cambie los nombres de las hojas de trabajo o agregue nuevas hojas de trabajo). También sobrescribe todo lo que esté en la celda A1. (Si desea que los nombres de las hojas de trabajo se coloquen en una celda diferente en cada hoja de trabajo, cambie los valores usados ​​en la colección Cells.)

_Nota: _

Si desea saber cómo usar las macros descritas en esta página (o en cualquier otra página de los sitios ExcelTips), he preparado una página especial que incluye información útil.

link: / excelribbon-ExcelTipsMacros [Haga clic aquí para abrir esa página especial en una nueva pestaña del navegador].

ExcelTips es su fuente de formación rentable en Microsoft Excel.

Este consejo (11419) se aplica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 y Excel en Office 365. Puede encontrar una versión de este consejo para la interfaz de menú anterior de Excel aquí:

link: / excel-Getting_the_Name_of_the_Worksheet_Into_a_Cell [Obtener el nombre de la hoja de trabajo en una celda].