在Excel表重命名時,獲取某些VBA代碼的最佳方式是什麼?在Excel中重命名工作表事件
7
A
回答
4
這裏有一個方法。訣竅是通過專門的課程將應用程序級別的事件進行陷阱。使用SheetActivate事件,存儲對活動工作表的引用及其名稱。當工作表處於停用狀態(和另一個已激活的工作表)時,將工作表參考的名稱與存儲的字符串進行比較。這裏的類(稱爲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
實例化這個使用打開工作簿事件的全局變量:
Public xlc As CExcelEvents
Sub Workbook_Open()
Set xlc = New CExcelEvents
End Sub
僅當用戶選擇另一個工作表上面的例子將觸發。如果您需要更多粒度,請同時監控Sheet Change事件。
0
我急切地等待着這個答案,因爲我經過多次搜索後還沒有找到答案。在我發現的工作表上沒有重命名事件,因此您不得不採取其他方法。
我見過的最好的一個(它是可怕的)是通過使它們變爲只讀或不可見來禁止重命名,然後提供自己的工具欄或按鈕來完成重命名。非常醜陋,用戶討厭它。
我也看到了應用程序禁用了辦公室工具欄中的重命名菜單項,但是這並不妨礙雙擊該選項卡並在那裏重命名。也非常醜陋,用戶討厭它。
祝你好運,我希望有人想出了更好的答案。
3
顯然沒有事件來處理這個問題,即使使用Application對象。多煩人。
我可能會嘗試通過存儲Worksheet的啓動值並在儘可能多的事件上檢查它來嘗試捕獲它 - 這是公認的黑客攻擊。
以下似乎對我有用,希望它有幫助。
放在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. 使用xlsxwriter重命名Excel工作表
- 2. 在Matlab中重命名Excel工作表名稱
- 3. 如果工作表名稱已存在,Excel重命名工作表
- 4. VBA基於Excel工作表中的單元格重命名多個工作表,並根據Excel工作表重命名Excel單元格
- 5. Excel工作表_事件
- 6. 如果工作表已經存在,請重命名excel工作表
- 7. Excel中重命名工作表依次用VBA
- 8. 在excel中複製和重命名未打開的工作簿
- 9. 多次動態複製工作表並在Excel中使用VBA重命名
- 10. 使用宏在Excel 2013中創建和重命名新工作表
- 11. Excel VBA中:批次重命名錶
- 12. Excel宏:命令按鈕重疊在工作表中的形狀
- 13. 如何重命名工作表
- 14. VBA:重命名活動工作表
- 15. 重命名工作表基於INPUT BOX
- 16. VBA:重命名複製工作表
- 17. 使用c#重命名工作表OpenOfficeCalc#
- 18. R XLConnect readWorksheet:重命名每個工作表中的列名
- 19. 循環遍歷Excel工作表中的所有命名區域
- 20. 複選框在Excel宏中重命名
- 21. 重命名URL在PHP不工作
- 22. 單擊按鈕時重命名工作簿和工作表
- 23. 跟蹤工作簿和工作表重命名
- 24. Excel Ribbon在文件重命名後不起作用
- 25. 重命名事物
- 26. 重命名文件名在表
- 27. 從Excel工作表中獲取列名
- 28. 在excel工作表中使用命名區域來傳播列表框
- 29. 將所有工作表名稱重命名爲文件夾中的工作簿名稱
- 30. git作者重命名不工作
這不起作用了。 – plocks 2017-06-08 09:54:45
我可以在Excel 2016中找到的唯一一個在重命名錶單時觸發的事件是Application.AfterCalculate。該方法大致相同:維護Worksheet對象及其當前名稱的映射,並在此事件期間交叉檢查所有這些對象。 – nicholas 2017-09-21 19:22:06