Qual è il modo migliore per eseguire un codice VBA quando viene rinominato un foglio Excel?Evento di modifica del foglio di lavoro in Excel
risposta
Ecco un approccio. Il trucco è quello di intercettare gli eventi a livello di applicazione tramite una classe dedicata. Utilizzando l'evento SheetActivate, memorizza un riferimento al foglio attivo e il suo nome. Quando il foglio è disattivato (e un altro attivato) confronta il nome del riferimento del foglio con la stringa memorizzata. Ecco la classe (chiamati 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
un'istanza di questo con una variabile globale utilizzando l'evento aperto cartella di lavoro:
Public xlc As CExcelEvents
Sub Workbook_Open()
Set xlc = New CExcelEvents
End Sub
L'esempio precedente scatterà solo quando l'utente seleziona un altro foglio. Se si desidera una maggiore granularità, monitorare anche l'evento di cambio del foglio.
Aspetto con impazienza una risposta a questo perché non l'ho capito dopo molte ricerche. Non è stato rinominato un evento su un foglio di lavoro che ho trovato, quindi sei costretto ad avere un approccio alternativo.
il migliore che ho visto (che è terribile ) è di vietare rinomina sui fogli rendendoli di sola lettura o invisibile, e quindi fornire la propria barra degli strumenti o il pulsante che fa la ridenominazione. Molto brutto e gli utenti lo odiano.
Ho anche visto applicazioni che disabilitano la voce di menu rinomina nella barra degli strumenti dell'ufficio, ma ciò non impedisce di fare doppio clic sulla scheda e rinominare lì. Anche molto brutto e gli utenti lo odiano.
Buona fortuna, spero che qualcuno fornisca una risposta migliore.
Apparentemente non esiste un evento per gestire questo, anche utilizzando l'oggetto Application. Che noioso.
Probabilmente cercherò di acquisirlo memorizzando il valore di avvio del foglio di lavoro e controllandolo su quanti più eventi possibile - che è certamente un trucco.
Quanto segue sembrava funzionare per me, Spero che sia d'aiuto.
Nel modulo 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. Evento di modifica del foglio di lavoro VBA
- 2. Foglio di lavoro VBA modifica bypass evento?
- 3. Trova fondo del foglio di lavoro Excel in VBA
- 4. Copia un intero foglio di lavoro in un nuovo foglio di lavoro in Excel 2010
- 5. C# read excel foglio di lavoro
- 6. Come attivare un foglio di lavoro specifico in Excel?
- 7. Importare un foglio di lavoro Excel in Access utilizzando VBA
- 8. convertire xml in Excel con più foglio di lavoro
- 9. Elimina foglio di lavoro in Excel tramite VBA
- 10. Interop di Excel: _Worksheet o foglio di lavoro?
- 11. NullReferenceException nella creazione di un foglio di lavoro Excel
- 12. Excel VBA: trigger Salva come Modifica evento in ComboBox
- 13. Salva foglio di lavoro Excel come .csv con R?
- 14. Interroga il foglio di lavoro excel con VBA
- 15. Intestazioni per foglio di lavoro Excel utilizzando EPPlus
- 16. Come chiamare la macro specifica del foglio da una cartella di lavoro di Excel in un'altra?
- 17. Configurare la directory di lavoro del foglio di lavoro Scala
- 18. Apri file Excel su un foglio di lavoro specifico
- 19. come copiare un foglio di un foglio di lavoro su un altro foglio di lavoro utilizzando POI apache e java
- 20. Esiste un limite nella lunghezza del nome di un foglio di lavoro di Excel?
- 21. $ (simbolo del dollaro) equivalente per notazione strutturata (tabella del foglio di lavoro Excel)
- 22. Come si modifica un foglio esistente in una cartella di lavoro di Excel utilizzando il pacchetto Openxlsx in R?
- 23. C# - Come copiare un singolo foglio di lavoro Excel da una cartella di lavoro a un'altra?
- 24. Come aggiungere il foglio di lavoro dopo l'ultimo foglio della cartella di lavoro?
- 25. Excel: macro per esportare il foglio di lavoro come file CSV senza uscire dal foglio Excel corrente
- 26. Fogli di lavoro Excel di riferimento dinamicamente
- 27. In Excel VSTO, come posso verificare se un foglio di lavoro appartiene a una cartella di lavoro chiusa?
- 28. foglio di importazione excel in winform
- 29. Elimina tutte le forme nel foglio di lavoro Excel eccetto i controlli del modulo
- 30. Scrittura dei risultati del test su TestContext con un foglio di lavoro Excel come origine dati
Questo non funziona più. – plocks
L'unico evento che riesco a trovare in Excel 2016 che si attiva quando un foglio viene ridenominato è Application.AfterCalculate. L'approccio è più o meno lo stesso: mantenere una mappatura degli oggetti del foglio di lavoro e dei loro nomi correnti e confrontarli tutti durante questo evento. – nicholas