मैं एक्सेल में एक वीबीए कोड लिखने की कोशिश कर रहा हूं जो किसी कार्यपुस्तिका के बंद होने पर चलेगा

मैंने मॉड्यूल के अंदर "निजी उप auto_close ()", या "यह वर्कबुक" के अंदर "निजी उप कार्यपुस्तिका_ इससे पहले बंद करें (बूलियन के रूप में रद्द करें)" करने की कोशिश की। सिंगल फाइल ओपन होने पर वे दोनों बहुत अच्छा काम करते हैं। लेकिन अगर एक ही समय में कई फाइलें खुली हों तो नहीं।

समस्या यह है कि ऐसा लगता है कि यदि एक ही समय में कई एक्सेल फाइलें (कार्यपुस्तिकाएं) खुली हैं, तो ऐसा लगता है कि यह काम नहीं कर रहा है :( केवल अगर मैं उन्हें उस बिंदु पर बंद कर देता हूं जब एक फ़ाइल खुली होती है, तो कोड निष्पादित होता है

कोई सलाह? क्या किसी ने पहले ऐसा कुछ सामना किया था?

1
GuyTheJester 31 जिंदा 2021, 15:45

2 जवाब

सबसे बढ़िया उत्तर

कक्षा का उपयोग करके कार्यपुस्तिकाओं को बंद करने से रोकें

  • ध्यान दें कि यह कोड तीन अलग-अलग मॉड्यूल में जाता है। जब कक्षाओं की बात आती है तो मैं एक नया हूं, मैंने केवल एक बार कुछ ऐसा ही बनाया है। मुझे समझ नहीं आता कि यह कब और क्यों रुकता है (लेकिन कभी-कभी ऐसा होता है)। इसलिए यदि आप परेशानी में हैं, तो एक और प्रश्न पूछें (अब आपके पास कक्षा से संबंधित कोड है) और शीर्षक में Class डालें और उम्मीद है कि कोई और योग्य उत्तर दे सकता है।
  • आपके लिए एकमात्र संभावित नई चीज तीसरा कोड है, जिसे कक्षा मॉड्यूल में जाना है। एक नया वर्ग मॉड्यूल (Class1) डालें और गुण विंडो में Class1 को wbCloser में बदलें। कोड को उपयुक्त मॉड्यूल में कॉपी करें और कार्यपुस्तिका को सहेजें। फिर मानक मॉड्यूल में AppEventsInit चलाएं।
  • ध्यान दें कि जब भी आप इस कार्यपुस्तिका को खोलेंगे, AppEventsInit चलेगी (Workbooks_Open)।

ThisWorkbook

Option Explicit

Private Sub Workbook_Open()
    AppEventsInit
End Sub

मानक मॉड्यूल उदा. Module1

Option Explicit

Public AppEvent As New wbCloser ' Class Name ('wbCloser')

Sub AppEventsInit()
    Set AppEvent.App = Application
End Sub

कक्षा मॉड्यूल: Class1 का नाम बदलकर wbCloser कर दिया गया

Option Explicit

Public WithEvents App As Application

Private Sub App_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean)
    Dim msg As Variant
    msg = MsgBox("The workbook '" & Wb.Name _
        & "' is trying to close. Will you allow it?", vbYesNo)
    If msg = vbYes Then
        'Cancel = False ' by default
        MsgBox "You allowed closing of '" & Wb.Name & "'."
    Else
        Cancel = True
        MsgBox "You prevented closing of '" & Wb.Name & "'."
    End If
End Sub

Private Sub Class_Initialize()
    ' Remove if it doesn't work.
    Application.Speech.Speak "Workbook Clozer Initialized"
End Sub
0
VBasic2008 31 जिंदा 2021, 18:57

इसे इस्तेमाल करे: वीबीए खोलने और इसमें मॉड्यूल प्रकार डालने के बाद:

उप CloseAllActiveWorkbooks ()

कार्यपुस्तिकाएँ.बंद करें

अंत उप

0
Ashgabat 31 जिंदा 2021, 18:53