在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. 在c#中重命名excel工作簿
- 2. RDCOMclient重命名Excel工作表
- 3. 使用xlsxwriter重命名Excel工作表
- 4. 在Matlab中重命名Excel工作表名稱
- 5. 在SSIS包中重命名Excel工作表名稱
- 6. 如果工作表名稱已存在,Excel重命名工作表
- 7. VBA基於Excel工作表中的單元格重命名多個工作表,並根據Excel工作表重命名Excel單元格
- 8. Excel工作表_事件
- 9. 如果工作表已經存在,請重命名excel工作表
- 10. Excel中重命名工作表依次用VBA
- 11. 重命名在Excel工作表中具有相同名稱的選項卡
- 12. 在excel中複製和重命名未打開的工作簿
- 13. 如何使用NetOffice重命名Excel工作表?
- 14. VBA Excel,根據單元格值重命名工作表
- 15. 以編程方式重命名沒有API的Excel工作表
- 16. 使用PowerShell重命名多個Excel工作表
- 17. C#如何使用Interop重命名Excel工作表
- 18. 使用Reporting Services 2008 R2重命名Excel工作表
- 19. 多次動態複製工作表並在Excel中使用VBA重命名
- 20. 使用宏在Excel 2013中創建和重命名新工作表
- 21. 如何在excel-vba中找到重命名工作表的索引號
- 22. 在xcode 4中重命名工作區
- 23. Excel宏:命令按鈕重疊在工作表中的形狀
- 24. 複製和重命名工作表
- 25. VBA:重命名複製工作表
- 26. 重命名SQLite表不工作
- 27. VBA:重命名活動工作表
- 28. 如何重命名工作表
- 29. 使用c#重命名工作表OpenOfficeCalc#
- 30. 重命名工作表基於INPUT BOX
這不起作用了。 – plocks 2017-06-08 09:54:45
我可以在Excel 2016中找到的唯一一個在重命名錶單時觸發的事件是Application.AfterCalculate。該方法大致相同:維護Worksheet對象及其當前名稱的映射,並在此事件期間交叉檢查所有這些對象。 – nicholas 2017-09-21 19:22:06