Excel

2009-12-21 17 views
7

में वर्कशीट इवेंट का नाम बदलें एक्सेल शीट का नाम बदलने पर कुछ वीबीए कोड चलाने का सबसे अच्छा तरीका क्या है?Excel

उत्तर

4

यहाँ एक तरीका है। चाल एक समर्पित वर्ग के माध्यम से एक आवेदन स्तर पर घटनाओं को फंसाना है। शीटएक्टिवेट ईवेंट का उपयोग करके सक्रिय शीट के साथ-साथ इसके नाम का संदर्भ संग्रहित करें। जब शीट निष्क्रिय हो जाती है (और एक और सक्रिय) संग्रहित स्ट्रिंग के खिलाफ शीट संदर्भ के नाम की तुलना करें। एक वैश्विक चर वर्कबुक खुला घटना उपयोग करने के साथ

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 

उपरोक्त उदाहरण केवल जब उपयोगकर्ता किसी अन्य कार्यपत्रक का चयन करता है ट्रिगर किया जाएगा यहाँ वर्ग (बुलाया CExcelEvents) है। यदि आप अधिक ग्रैन्युलरिटी चाहते हैं, तो शीट चेंज इवेंट की निगरानी भी करें।

+0

यह अब और काम नहीं करता है। – plocks

+0

एक्सेल 2016 में एकमात्र ऐसा ईवेंट मिल सकता है जो शीट का नाम बदलकर आग लगती है। आवेदन करने के बाद। दृष्टिकोण मोटे तौर पर वही है: वर्कशीट ऑब्जेक्ट्स और उनके वर्तमान नामों का मैपिंग बनाए रखें, और इस घटना के दौरान उन सभी को क्रॉस-चेक करें। – nicholas

0

मैं उत्सुकता से इसका उत्तर देने का इंतजार कर रहा हूं क्योंकि मुझे बहुत अधिक खोज के बाद इसे समझ नहीं आया है। मुझे मिली वर्कशीट पर कोई नामकरण कार्यक्रम नहीं है, इसलिए आपको वैकल्पिक दृष्टिकोण प्राप्त करने के लिए मजबूर होना पड़ता है।

सबसे अच्छा मैंने देखा है (जो भयानक) चादरों पर नाम केवल पढ़ने या अदृश्य बनाकर पुनर्नामित करना है, और फिर अपना स्वयं का टूलबार या बटन प्रदान करता है जो नाम बदलता है। बहुत बदसूरत और उपयोगकर्ता इसे नफरत करते हैं।

मैंने उन अनुप्रयोगों को भी देखा है जो कार्यालय टूलबार में नाम बदलें मेनू आइटम को अक्षम करते हैं, लेकिन यह टैब को डबल-क्लिक करने और वहां नाम बदलने से नहीं रोकता है। इसके अलावा बहुत बदसूरत और उपयोगकर्ता इसे नफरत करते हैं।

शुभकामनाएं, मुझे उम्मीद है कि कोई बेहतर उत्तर के साथ आता है।

3

स्पष्ट रूप से एप्लिकेशन ऑब्जेक्ट का उपयोग करके इसे संभालने के लिए कोई घटना नहीं है। कैसा कष्टकर।

मैं शायद वर्कशीट के स्टार्टअप मान को संग्रहीत करके इसे जितना संभव हो उतना ईवेंट जांच कर इसे पकड़ने की कोशिश करता हूं - जो स्वीकार्य रूप से एक हैक है।

निम्नलिखित मेरे लिए काम करना प्रतीत होता है, उम्मीद है कि यह मदद करता है।

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 
संबंधित मुद्दे