एक विशिष्ट वर्कशीट खोलना


1

मैं चाहता हूं कि जब कार्यपुस्तिका खुलती है, तो चालू माह खुलने के बाद शीट की संख्या कम हो जाती है। किसी को भी मदद कर सकते हैं? इसके अलावा, जैसा कि मैंने एक अवकाश पत्र बनाया है और एक निश्चित प्रविष्टि बना रहा है, कार्यपुस्तिका में अंतिम शीट अपने आप खुल जाती है। किसी भी विचार क्या कारण हो सकता है? मेरा कोड है:

Dim l, m, leaves
Private Sub Workbook_Open()
ThisWorkbook.Sheets("Control").Visible = xlSheetVisible
ThisWorkbook.Sheets("Control").Range("A1").Value = ""
ThisWorkbook.Sheets("Control").Visible = xlSheetVeryHidden
Sheets(Month(Now)).Activate
Application.StatusBar = "Designed by:- Shefali Oberoi"
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim tdy, later, a, val, pre, col, rw, mmcc, aname, m
m = 0
Do While (m = 0)
    If Sh.Name = "Control" Then
        Sh.Visible = xlSheetVeryHidden
        ThisWorkbook.Sheets(Month(Now)).Activate
        End
    Else
    End If
    col = Target.Column
    rw = Target.Row
    val = Target.Value

    If val = "" Or val = "//" Then
        Exit Sub
    Else
        aname = ActiveSheet.Name
        later = Format(Now + 15, "dd/mm/yyyy")
        tdy = Format(ActiveSheet.Cells(7, col).Value & "/" & ActiveSheet.Range("B2").Value & "/" & ActiveSheet.Range("B1").Value, "dd/mm/yyyy")
        pre = Format(Now, "dd/mm/yyyy")
        a = ActiveSheet.Cells(6, col)
        fifth = Format(Now + 5, "dd/mm/yyyy")
        Annual = Format(ActiveSheet.Cells(7, col).Value & "/" & ActiveSheet.Range("B2").Value & "/" & ActiveSheet.Range("B1").Value, "dd/mm/yyyy")
        third = Format(ActiveSheet.Cells(7, col).Value & "/" & ActiveSheet.Range("B2").Value & "/" & ActiveSheet.Range("B1").Value, "dd/mm/yyyy")
        If tdy = "//" Then
            End
        End If

        If DateValue(tdy) >= DateValue(later) Then
            MsgBox "OOPS! Cannot apply beyond next 15 days!", vbCritical
            ActiveSheet.Cells(rw, col).Value = ""
            End

        Else
            If ActiveSheet.Cells(rw, col).Value = "Annual Leave" And DateValue(tdy) < DateValue(fifth) Then
                MsgBox "OOPS! Annual Leave can only be applied 5 days prior. Email has been sent to Saurabh", vbCritical
                Set myolapp = CreateObject("Outlook.Application")
                Set myitem = myolapp.CreateItem(OlMailItem)
                myitem.to = "xyz@abc.com"
                myitem.Subject = "Annual Leave Request"
                myitem.htmlbody = "<html><font face='arial' size=2>Hi Saurabh,<br><br>"
                myitem.htmlbody = myitem.htmlbody & "I am trying to apply for an annual leave for " & Annual
                myitem.htmlbody = myitem.htmlbody & " which is within next five days."
                myitem.htmlbody = myitem.htmlbody & "</font></html>"
                myitem.send
                ThisWorkbook.Save
                ActiveSheet.Cells(rw, col).Value = ""
                End
            Else

                If DateValue(tdy) <= DateValue(pre) Then
                    MsgBox "OOPS! Date has already passed. Cannot process this request.", vbCritical
                    ActiveSheet.Cells(rw, col).Value = ""
                    End
                Else
                    If a > 2 Then
                        MsgBox "OOPS! Two employees are already on leave." & vbCrLf & "This request cannot be processed.", vbCritical
                        Set myolapp = CreateObject("Outlook.Application")
                        Set myitem = myolapp.CreateItem(OlMailItem)
                        myitem.to = "xyz@abc.com"
                        myitem.Subject = "Leave Request"
                        myitem.htmlbody = "<html><font face='arial' size=2>Hi Saurabh,<br><br>"
                        myitem.htmlbody = myitem.htmlbody & "I am trying to apply leave for " & third
                        myitem.htmlbody = myitem.htmlbody & " when two other employees would be absent as well."
                        myitem.htmlbody = myitem.htmlbody & "</font></html>"
                        myitem.send
                        ThisWorkbook.Save
                        ActiveSheet.Cells(rw, col).Value = ""
                        End
                    Else
                    End If

                    If leaves = "" Then
                        leaves = Format(ActiveSheet.Cells(7, Target.Column).Value & "/" & ActiveSheet.Range("b2").Value & "/" & ActiveSheet.Range("b1").Value, "dd/mm/yyyy")
                    Else
                        leaves = leaves & ", " & Format(ActiveSheet.Cells(7, Target.Column).Value & "/" & ActiveSheet.Range("b2").Value & "/" & ActiveSheet.Range("b1").Value, "dd/mm/yyyy")
                    End If
                    ThisWorkbook.Sheets("Control").Visible = xlSheetVisible
                    If ThisWorkbook.Sheets("Control").Range("A1").Value = "" Then
                        ThisWorkbook.Sheets("Control").Range("A1").Value = leaves
                    Else
                        ThisWorkbook.Sheets("Control").Range("A1").Value = ThisWorkbook.Sheets("Control").Range("A1").Value & "," & leaves
                        End
                    End If
                End If
            End If
        End If
    End If
Loop
m = 1
End Sub

क्या कोई त्रुटि है या यह सिर्फ काम नहीं करता है?
जूलियन नाइट

आप वर्कशीट परिवर्तन फ़ंक्शन के ActiveSheetसाथ मिश्रण कर रहे हैं Sh। इसलिए यह स्पष्ट नहीं है कि क्या हो रहा है। आपको या तो टिप्पणियां जोड़नी चाहिए या ActiveSheet (पसंदीदा) को बदलना चाहिए ताकि अर्थ स्पष्ट हो। आपके पास एक पल के लिए ऐसा हो सकता है कि किसी और चीज़ के Workbook_SheetChangeलिए उस शीट को ट्रिगर करना संभव हो जो सक्रिय वर्कशीट नहीं है।
जूलियन नाइट

साथ ही, आपका उदाहरण कोड गड़बड़ है। इसमें कई टाइपो होते हैं। एक्सेल VBE पर कॉपी और पेस्ट करने की कोशिश करें। मेरा सुझाव है कि आप अपने मूल कोड पर जाएं, सभी का चयन करें, सब कुछ इंडेंट करने के लिए टैब दबाएं, फिर इसे संपादित बॉक्स में पेस्ट करें - जो मूल इंडेंटेशन के सभी को बनाए रखना चाहिए।
जूलियन नाइट

जवाबों:


0

आख़िरी चादर क्या है? क्या यह कंट्रोल शीट है?

यदि कोई कार्यपुस्तिका में कोई अन्य पत्रक जोड़ता है, तो यह सब विफल हो जाएगा। आपको यह सुनिश्चित करना चाहिए कि कार्यपुस्तिका सुरक्षित है।

मुख्य कोड बहुत गड़बड़ है मुझे डर है कि मैं इसे अनटंगल करने का समय नहीं हूं।

हालाँकि, वर्कबुक_ओपेन के उपयोग का मूल आधार Sheets(Month(Now)).Activateनिश्चित रूप से ठीक काम करता है - हालाँकि यह बहुत मजबूत नहीं है।

इसलिए यदि एक और पत्रक सक्रिय छोड़ा जा रहा है, तो यह Workbook_SheetChangeफ़ंक्शन में गड़बड़ अप कोड में होने की संभावना है ।


हाय जूलियन। अंतिम पत्रक नियंत्रण पत्रक है लेकिन यह छिपा हुआ है। इसलिए अंतिम पत्रक 12 की संख्या के अनुसार है। मेरी कार्यपुस्तिका सुरक्षित है। मैंने यहाँ कोड को सरलता से और स्पष्ट करने की कोशिश की है लेकिन मैं इसे फिर से लिखने की कोशिश करूँगा। एकमात्र समस्या जिसका मुझे सामना करना पड़ रहा है, वह यह है कि पिछली शीट यानी "12" पॉप्स खुले जब मैं वर्कबुक खोलूं और वह भी, जब मैं पहली शीट में कोई प्रविष्टि करूं।
शेफाली

मेरी समस्या हल हो गई है। लेकिन मैं अभी एक और समस्या है। यह रन टाइम त्रुटि 9 दिखाता है: सीमा से बाहर सबस्क्रिप्ट। मैंने बदल दिया है: ThisWorkbook.Sheets (महीना (अब)) b = MonthName (महीना (दिनांक)) ThisWorkbook.Sheets (b) के साथ सक्रिय करें। सक्रिय करें
Shefali

मुझे शीट के नामकरण में एक टाइपो पर संदेह है क्योंकि यह मेरे लिए ठीक काम करता है। इसके अलावा, उस कोड के साथ, उपयोगकर्ताओं के लिए एक अलग डिफ़ॉल्ट भाषा देखें! यदि यह एक समस्या हो सकती है, तो आप एक सरणी के रूप में (लघु) महीने के नामों की अपनी सूची के साथ बेहतर होंगे। इसके अलावा, क्या आप हमें बता सकते हैं कि मुद्दा क्या था और आपने इसे कैसे हल किया - यह भविष्य में लोगों के लिए उपयोगी हो सकता है जो स्टैक के बारे में है।
जूलियन नाइट

शीट्स की वर्तनी की जाँच करें - Monthname(1)रिटर्न January, लेकिन Monthname(1,True)रिटर्न Jan। यदि आपको यह सुनिश्चित करने के लिए नामों की एक त्वरित सूची की आवश्यकता है कि आप उन्हें सही तरीके से वर्तनी कर रहे हैं, For i=1 to 12:?monthname(i):nextतो तत्काल विंडो में आपको कॉपी और पेस्ट करने के लिए एक सूची दी
जाएगी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.