2009-05-11 11 views
8

क्या स्प्रेडशीट से वीबीए निकालने और इसे एक भंडार में संग्रहीत करने का एक साफ तरीका है।एक्सेल स्प्रेडशीट से वीबीए निकालने

स्प्रेडशीट शायद ही कभी बदलती है लेकिन वीबीए करता है। भंडार में पूरी स्प्रेडशीट को संग्रहीत करने से यह देखने के लिए कि कौन सा कोड बदल गया है और किसने इसे बदल दिया है, विभिन्न वीबीए संशोधनों में अंतर करना मुश्किल बनाता है।

हम VBA 6.5/एक्सेल 2003

उत्तर

10

एक्सेल और एक्सेस (पूर्व 2003 के लिए) के पिछले संस्करण का उपयोग एक ऐड-इन के माध्यम से समर्थित VBA स्रोत कोड संस्करण नियंत्रण। मैं कार्यालय VBA के लिए 2000

Visual SourceSafe (VSS) समर्थन dropped with the release of Office 2003 था में इस का इस्तेमाल किया है बहुत प्रभावी ढंग से, लेकिन ऐड-इन है कि कार्यालय XP डेवलपर जाहिरा तौर पर works with Office 2003 के साथ भेज दिया गया था।

Microsoft Knowledge Base आलेख:

असफल है कि आप (here से VBA कोड को निकालने के लिए इस कोड का उपयोग कर सकते हैं, लेकिन यह याद आ रही थी अंतिम वस्तु सफाई)। चेतावनियां के लिए वेबपेज पढ़ें:

option explicit 

Const vbext_ct_ClassModule = 2 
Const vbext_ct_Document = 100 
Const vbext_ct_MSForm = 3 
Const vbext_ct_StdModule = 1 

Main 

Sub Main 
    Dim xl 
    Dim fs 
    Dim WBook 
    Dim VBComp 
    Dim Sfx 
    Dim ExportFolder 

    If Wscript.Arguments.Count <> 1 Then 
     MsgBox "As the only argument, give the FULL path to an XLS file to extract all the VBA from it." 
    Else 

     Set xl = CreateObject("Excel.Application") 
     Set fs = CreateObject("Scripting.FileSystemObject") 

     xl.Visible = true 

     Set WBook = xl.Workbooks.Open(Trim(wScript.Arguments(0))) 

     ExportFolder = WBook.Path & "\" & fs.GetBaseName(WBook.Name) 

     fs.CreateFolder(ExportFolder) 

     For Each VBComp In WBook.VBProject.VBComponents 
      Select Case VBComp.Type 
       Case vbext_ct_ClassModule, vbext_ct_Document 
        Sfx = ".cls" 
       Case vbext_ct_MSForm 
        Sfx = ".frm" 
       Case vbext_ct_StdModule 
        Sfx = ".bas" 
       Case Else 
        Sfx = "" 
      End Select 
      If Sfx <> "" Then 
       On Error Resume Next 
       Err.Clear 
       VBComp.Export ExportFolder & "\" & VBComp.Name & Sfx 
       If Err.Number <> 0 Then 
        MsgBox "Failed to export " & ExportFolder & "\" & VBComp.Name & Sfx 
       End If 
       On Error Goto 0 
      End If 
     Next 

     xl.Quit 

     Set fs = Nothing 
     Set xl = Nothing 

    End If 
End Sub 
+0

निर्माण अच्छी तरह से (क्रॉस लिंक इन विषयों और/या जवाब? के लिए एक रास्ता है)। मेरी ज़रूरत के लिए इस दिनचर्या को अनुकूलित करने से पहले मैंने जो एकमात्र जोड़ा बनाया है, वह पहले और बाद में कोड की निम्नलिखित पंक्तियों को जोड़ रहा है। xl.EnableEvents = झूठी WBook = xl.Workbooks.Open (ट्रिम ("SomeFile.xlsm")) xl।EnableEvents = True – chaltahai

1
+0

मुझे लगता है कि पहला लिंक केवल Office –

+0

के पूर्व-2003 संस्करणों पर लागू होता है, वास्तव में, दोनों प्रश्न काफी सामान्य हैं, लेकिन मुझे लगता है कि विभिन्न उत्तरों में सभी विकल्पों को शामिल किया गया है। – RedBlueThing

+0

@ अनाम-प्रकार एनपी :) – RedBlueThing

1

इस सवाल का अन्य उत्तर बहुत अच्छी तरह से उसे संबोधित, लेकिन अगर आप कोड लिखना शुरू कर रहे हैं, तो 01 में देखें। यह कार्यालय के लिए प्रबंधित कोड प्रदान करता है, और सबसे अच्छा, आप इसे सी # में भी कर सकते हैं या जो भी .NET भाषा आपकी कल्पना पर हमला करता है। यह एक्सेल 2003 के साथ भी काम करता है, जो आपके मामले में बोनस है।

0

आपके पास पहले से ही एक अच्छा जवाब है, लेकिन मुझे एक तरफ जोड़ने की अनुमति दें।

डेटा के सभी स्प्रेडशीट से अलग स्प्रेडशीट में अपने सभी वीबीए कोड को रखना संभव है। यदि आप ऐसा करते हैं तो यह आपकी तुलना को आसान बना सकता है।

+0

क्या कोई इस के उदाहरण को इंगित कर सकता है? – nekomatic

+0

http://msdn.microsoft.com/en-us/library/aa221273%28office.11%29.aspx पर एक नज़र डालें जो दिखाता है कि VBA युक्त एक से एक नई कार्यपुस्तिका कैसे अलग करें। – JonnyBoats

+0

वीबीए से मौजूदा वर्कबुक खोलने के लिए http://msdn.microsoft.com/en-us/library/aa221367%28office.11%29.aspx भी देखें। – JonnyBoats

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