2011-07-27 15 views
10

क्या कोई यह जानता है कि एक्सेल वीबीए का उपयोग कर एक्सेल दस्तावेज़ में कुछ शीट मौजूद हैं या नहीं?एक्सेल-वीबीए में कुछ शीट मौजूद हैं या नहीं, यह जांचने के लिए कैसे?

+0

संभव डुप्लिकेट http://stackoverflow.com/questions/6040164/excel- vba-if-worksheetwsname-exist) –

+2

संभावित डुप्लिकेट [टेस्ट या चेक शीट मौजूद है या नहीं) (https://stackoverflow.com/questions/6688131/test-or-check-if-sheet-exists) – puzzlepiece87

उत्तर

13

हालांकि (दुर्भाग्य से) इस तरह के विधि उपलब्ध नहीं है, हम इस जांच करने के लिए अपने स्वयं के समारोह बना सकते हैं ..

आशा है कि नीचे दिए गए कोड को अपनी आवश्यकताओं फिट बैठता है।

Edit1: जोड़ा भी बयान को नष्ट ...

Sub test() 

    If CheckSheet(Sheets(3).Name) then 

     Application.DisplayAlerts = False 
     Sheets(Sheets(3).Name).Delete 
     Application.DisplayAlerts = True 

    End If 

End Sub 

समाधान मैं के लिए ...

Function CheckSheet(ByVal sSheetName As String) As Boolean 

    Dim oSheet As Excel.Worksheet 
    Dim bReturn As Boolean 

    For Each oSheet In ActiveWorkbook.Sheets 

     If oSheet.Name = sSheetName Then 

      bReturn = True 
      Exit For 

     End If 

    Next oSheet 

    CheckSheet = bReturn 

End Function 

वैकल्पिक रूप से जाना चाहते हैं, तो आप कोड का उपयोग करने से परहेज नहीं करते, तो जो सक्रिय रूप से त्रुटियों को बढ़ाता है (जिसे सामान्य कोडिंग सर्वोत्तम प्रथाओं द्वारा अनुशंसित नहीं किया जाता है) आप नीचे इस 'Spartan Programming wannabe' कोड का उपयोग कर सकते हैं ...

Function CheckSheet(ByVal sSheetName As String) As Boolean 

    Dim oSheet As Excel.Worksheet 
    Dim bReturn As Boolean 

    For Each oSheet In ActiveWorkbook.Sheets 

     If oSheet.Name = sSheetName Then 

      bReturn = True 
      Exit For 

     End If 

    Next oSheet 

    CheckSheet = bReturn 

End Function 


Function CheckSheet(ByVal sSheetName As String) As Boolean 

    On Error Resume Next 
    Dim oSheet As Excel.Worksheet 

    Set oSheet = ActiveWorkbook.Sheets(sSheetName) 
    CheckSheet = IIf(oSheet Is Nothing, False, True) 

End Function 
+0

यह भी एक है उत्कृष्ट समाधान - त्रुटियों पर भरोसा किए बिना चेक। मुझे पता था कि एक बेहतर तरीका था, और मैंने काम पर पहले इस तरह इस्तेमाल किया था, मुझे याद नहीं आया कि यह कैसे करना है। @ टियागो: आप शीट्स (1) पर इसका उपयोग कैसे करेंगे? बस शीट्स में पास करें (1) .नाम? –

+0

@PaulR, हाँ, बिल्कुल ... 'शीट्स (1) .name' चाल करेगा। ध्यान दें कि आपको उन कार्यपुस्तिकाओं को सक्रिय रूप से परिभाषित करने की आवश्यकता हो सकती है जिन्हें आप उपयोग करने जा रहे हैं, क्योंकि 'शीट' संदर्भ सक्रिय कार्यपुस्तिका को इंगित करता है (जो कभी-कभी अपेक्षित नहीं होता है)। –

+0

ठीक है, मैंने कभी-कभी मुझे काम पर काट दिया है। बड़े परिचालनों के लिए, मैं अपनी वर्कशीट्स ("शीटनाम") ऑब्जेक्ट के लिए एक ब्लॉक के साथ उपयोग करता हूं, और इसे अच्छा कहता हूं। निश्चित रूप से, यह सुनिश्चित करने के बाद, वर्कशीट्स ("शीटनाम") मौजूद था। –

3

कुछ इस तरह आप मिल जाएगा शुरू कर दिया:

On Error Resume Next 

Dim wSheet as Worksheet 
Set wSheet = Sheets(1) ' can also be a string, such as Sheets("Sheet1") 

If wSheet Is Nothing Then 
    MsgBox "Worksheet not found!" 
    Set wSheet = Nothing ' make the worksheet point to nothing. 
    On Error GoTo 0 
Else 
    MsgBox "Worksheet found!" 
    Set wSheet = Nothing ' set the found Worksheet object to nothing. You can use the found wSheet for your purposes, though. 
End If 

इस कोड http://www.ozgrid.com/VBA/IsWorkbookOpen.htm पर आधारित था। DoSheetExist() उप के लिए देखो।

आशा है कि इससे मदद मिलती है!

0

मैंने नीचे दिए गए अनुसार आईबीएम नोट्स (पूर्व में कमल नोट्स) द्वारा उपयोग की जाने वाली भाषाओं में से एक, लोटसस्क्रिप्ट में उपयोग के लिए इस कोड को अनुकूलित किया है।

Public Function ExcelSheetExists(_ 
    xlBook As Variant, _ ' Excel workbook object 
    ByVal strSheetName As String _ 
    ) As Boolean 

    On Error GoTo errHandler 

    ForAll xlSheet In xlBook.Sheets 
     If xlSheet.Name = strSheetName Then 
      ExcelSheetExists = True 
      Exit Forall 
     End If 
    End ForAll 

    GoTo Done 

errHandler: 
    ' Call MyCustomErrorHandler() 
    Resume Done 
Done: 

End Function 
0
On Error GoTo Line1 
If Sheets("BOX2").Index > 0 Then 
Else 
Line1: MsgBox ("BOX2 is missing") 
end if 

मैं इसे इस तरह से :) किया

[एक्सेल VBA तो वर्कशीट ("wsName") मौजूद है] (की
संबंधित मुद्दे

 संबंधित मुद्दे