¿Cuál es la mejor manera de ejecutar un código VBA cuando se cambia el nombre de una hoja de Excel?Cambiar el nombre de la hoja de cálculo Evento en Excel
Respuesta
Aquí es uno de los enfoques. El truco es atrapar los eventos en un nivel de aplicación a través de una clase dedicada. Usando el evento SheetActivate, almacene una referencia a la hoja activa así como su nombre. Cuando la hoja está desactivada (y otra activada) compare el nombre de la referencia de la hoja con la cadena almacenada. Aquí está la clase (llamados CExcelEvents):
Option Explicit
Private WithEvents xl As Application
Private CurrSheet As Worksheet
Private CurrSheetName As String
Private Sub Class_Initialize()
Set xl = Excel.Application
Set CurrSheet = ActiveSheet
CurrSheetName = CurrSheet.Name
End Sub
Private Sub Class_Terminate()
Set xl = Nothing
End Sub
Private Sub xl_SheetActivate(ByVal Sh As Object)
If CurrSheetName <> CurrSheet.Name Then
Debug.Print "You've renamed the sheet: " & CurrSheetName & " to " & CurrSheet.Name
' Do something here - rename the sheet to original name?
End If
Set CurrSheet = Sh
CurrSheetName = CurrSheet.Name
End Sub
Instantiate esto con una variable global utilizando el evento abierto Libro de trabajo:
Public xlc As CExcelEvents
Sub Workbook_Open()
Set xlc = New CExcelEvents
End Sub
el ejemplo anterior se activará sólo cuando el usuario selecciona otra hoja de cálculo. Si desea más granularidad, controle también el evento Cambio de hoja.
Espero ansiosamente una respuesta a esto porque no me he dado cuenta después de mucha búsqueda. No hay un evento de cambio de nombre en una hoja de trabajo que he encontrado, por lo que se ve obligado a tener un enfoque alternativo.
La mejor que he visto (que es horrible) es prohibir el cambio de nombre en las hojas haciéndolas de solo lectura o invisibles, y luego proporcione su propia barra de herramientas o botón que hace el cambio de nombre. Muy feo y los usuarios lo odian.
También he visto aplicaciones que desactivan el elemento de menú cambiar nombre en la barra de herramientas de la oficina, pero eso no impide que haga doble clic en la pestaña y cambie el nombre allí. También es muy feo y los usuarios lo odian.
Buena suerte, espero que a alguien se le ocurra una mejor respuesta.
Parece que no hay Evento para manejar esto, incluso utilizando el objeto Aplicación. Que molesto.
Probablemente intente capturarlo almacenando el valor de inicio de la hoja de cálculo y comprobándolo en tantos eventos como sea posible, lo que es un verdadero truco.
Lo siguiente parecía funcionar para mí, espero que ayude.
En el módulo ThisWorkbook:
Private strWorksheetName As String
Private Sub Workbook_Open()
strWorksheetName = shtMySheet.Name
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Call CheckWorksheetName
End Sub
Private Sub Workbook_NewSheet(ByVal Sh As Object)
Call CheckWorksheetName
End Sub
Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
Call CheckWorksheetName
End Sub
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Call CheckWorksheetName
End Sub
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
Call CheckWorksheetName
End Sub
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Call CheckWorksheetName
End Sub
Private Sub CheckWorksheetName()
'If the worksheet has changed name'
If shtMySheet.Name <> strWorksheetName Then
DoSomething
End If
End Sub
- 1. Cómo cambio el nombre de la hoja de C# en una hoja de cálculo de Excel
- 2. ¿Existe un límite en la longitud del nombre de una hoja de cálculo de Excel?
- 3. Hoja de cálculo de Excel de Excel utilizando EPPlus
- 4. PDI de Apache: cambiar el formato de página para la hoja de cálculo de Excel
- 5. Copie una hoja de cálculo completa en una nueva hoja de cálculo en Excel 2010
- 6. ¿Almacenar objetos en la hoja de cálculo de Excel?
- 7. Abrir hoja de cálculo xml en Excel de forma predeterminada
- 8. Importación de datos de hoja de cálculo de Excel a otra hoja de cálculo de Excel que contiene VBA
- 9. Excel VBA: Guardar como activa el evento Cambiar en ComboBox
- 10. ruby excel reader, gema de la hoja de cálculo
- 11. C# lea la hoja de cálculo de Excel
- 12. NullReferenceException al crear la hoja de cálculo de Excel
- 13. La obtención de Excel referencia de hoja de cálculo nombre de la hoja a través de C#
- 14. llamando a la función de hoja de cálculo excel desde la celda excel
- 15. Abrir archivo de Excel en una hoja de cálculo específica
- 16. usando C# para seleccionar una hoja de cálculo en Excel
- 17. Extraer VBA de una hoja de cálculo de Excel
- 18. Guardar hoja de cálculo de Excel con Interop C#
- 19. ¿Guardar hoja de cálculo de Excel como .csv con R?
- 20. Renombrar un nombre de hoja de Excel en Matlab
- 21. Extrae datos de una hoja de cálculo Excel
- 22. Ocultar una hoja de cálculo de Excel con VBA
- 23. ¿Cómo insertar fácilmente la hoja de cálculo de Excel en la página web?
- 24. hoja de cálculo Excel xml: ¿es posible incrustar imágenes?
- 25. Excel sigue cargando mi hoja de cálculo con un error
- 26. ¿Referencia a la hoja de trabajo de Excel por nombre?
- 27. Cómo descargar y mostrar la hoja de cálculo de Excel en el navegador
- 28. ¿Cómo obtener el nombre interno de la forma en Excel
- 29. Importar datos de Excel utilizando SSIS sin conocer el nombre de la hoja
- 30. Buscar la parte inferior de la hoja de cálculo de Excel en VBA
Esto ya no funciona. – plocks
El único evento que puedo encontrar en Excel 2016 que se activa cuando se cambia el nombre de una hoja es Application.AfterCalculate. El enfoque es más o menos el mismo: mantener un mapeo de los objetos de la hoja de trabajo y sus nombres actuales, y verificarlos todos durante este evento. – nicholas