एमएस एक्सेल के लिए वर्जन कंट्रोल करने का सबसे अच्छा तरीका


172

MS Excel (2003/2007) के साथ आपने कौन से संस्करण नियंत्रण प्रणाली का उपयोग किया है? आप क्या सलाह देंगे और क्यों? आपने अपने शीर्ष रेटेड संस्करण नियंत्रण प्रणाली के साथ क्या सीमाएँ पाई हैं?

इसे परिप्रेक्ष्य में रखने के लिए, यहाँ कुछ उपयोग के मामले हैं:

  1. VBA मॉड्यूल के लिए संस्करण नियंत्रण
  2. एक से अधिक व्यक्ति एक्सेल स्प्रेडशीट पर काम कर रहे हैं और वे उसी वर्कशीट में बदलाव कर रहे हैं, जिसे वे मर्ज और इंटीग्रेट करना चाहते हैं। इस वर्कशीट में सूत्र, डेटा, चार्ट आदि हो सकते हैं
  3. उपयोगकर्ता बहुत तकनीकी नहीं हैं और कम संस्करण नियंत्रण प्रणालियों ने बेहतर उपयोग किया है
  4. अंतरिक्ष बाधा एक विचार है। आदर्श रूप से केवल एक्सेल स्प्रेडशीट के बजाय वृद्धिशील परिवर्तन सहेजे जाते हैं।

17
Google Apps / डॉक्स में MS Excel की पूर्ण कार्यक्षमता नहीं है, जिसे आपको मॉडलिंग जैसे अधिक उन्नत कार्य करने की आवश्यकता है।
TheObserver

25
@ रिची कॉटन। यदि वह एक व्यावहारिक विकल्प था (यानी matlab / python का उपयोग करके) तो सभी वित्तीय कंपनियां अब तक बदल गई होतीं। ऐसे लोगों से पूछना जो वित्तीय मॉडल का विश्लेषण करते हैं, लेकिन प्रोग्रामर होने के लिए प्रोग्रामर नहीं हैं, खतरे और वास्तविक अव्यवहारिक के साथ पूरे धोखाधड़ी पर है।
बेनामी टाइप

1
stackoverflow.com/q/608872/107537 यहाँ इसी तरह का प्रश्न देखें। लेकिन यह स्वयं वर्कशीट को संबोधित नहीं करता है। केवल VBA कोड।
विजय

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

यदि आप ज्यादातर VBA मैक्रोज़ पर सिर्फ संस्करण नियंत्रण करने में रुचि रखते हैं, तो मेरा उत्तर यहां देखें: stackoverflow.com/a/38297505/2146688
चेल जू

जवाबों:


64

मैंने अभी एक स्प्रेडशीट की स्थापना की है जो बाज़ार का उपयोग करता है, मैनुअल चेकइन के साथ / टॉरटिज़बीआरआर के माध्यम से बाहर। यह देखते हुए कि विषय ने मुझे बचाने वाले हिस्से के साथ मदद की, मैं यहां अपना समाधान पोस्ट करना चाहता था।

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

यह मुझे मैक्रो को एमएसीएस (हाँ, एमएसीएस ) के माध्यम से या मूल रूप से एक्सेल में मॉड्यूल के माध्यम से संपादित करने की अनुमति देता है , और बड़े बदलावों के बाद मेरी बीजेडआर रिपॉजिटरी करता है। क्योंकि सभी मॉड्यूल पाठ फ़ाइलें हैं, BZR में मानक अंतर-शैली कमांड मेरे स्रोतों के लिए एक्सेल फ़ाइल को छोड़कर काम करती है।

मैंने अपनी BZR रिपॉजिटरी, X: \ Data \ MySheet के लिए एक निर्देशिका सेटअप की है। रेपो में मेरे प्रत्येक मॉड्यूल के लिए MySheet.xls और एक .vba फ़ाइल हैं (यानी: Module1Macros)। अपनी स्प्रेडशीट में मैंने एक ऐसा मॉड्यूल जोड़ा है जो "वर्जनकंट्रोल" नामक निर्यात / आयात चक्र से मुक्त है। निर्यात और फिर से आयात किए जाने वाले प्रत्येक मॉड्यूल को "मैक्रोज़" में समाप्त होना चाहिए।

"वर्जनकंट्रोल" मॉड्यूल की सामग्री:

Sub SaveCodeModules()

'This code Exports all VBA modules
Dim i%, sName$

With ThisWorkbook.VBProject
    For i% = 1 To .VBComponents.Count
        If .VBComponents(i%).CodeModule.CountOfLines > 0 Then
            sName$ = .VBComponents(i%).CodeModule.Name
            .VBComponents(i%).Export "X:\Tools\MyExcelMacros\" & sName$ & ".vba"
        End If
    Next i
End With

End Sub

Sub ImportCodeModules()

With ThisWorkbook.VBProject
    For i% = 1 To .VBComponents.Count

        ModuleName = .VBComponents(i%).CodeModule.Name

        If ModuleName <> "VersionControl" Then
            If Right(ModuleName, 6) = "Macros" Then
                .VBComponents.Remove .VBComponents(ModuleName)
                .VBComponents.Import "X:\Data\MySheet\" & ModuleName & ".vba"
           End If
        End If
    Next i
End With

End Sub

इसके बाद, हमें इन मैक्रोज़ को चलाने के लिए ओपन / सेव के लिए इवेंट हुक को सेटअप करना होगा। कोड व्यूअर में, "ThisWorkbook" पर राइट क्लिक करें और "View Code" चुनें। आपको "कार्यपुस्तिका" दृश्य से "(सामान्य)" दृश्य से बदलने के लिए कोड विंडो के शीर्ष पर चयन बॉक्स को नीचे खींचना पड़ सकता है।

"कार्यपुस्तिका" दृश्य की सामग्री:

Private Sub Workbook_Open()

ImportCodeModules

End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

SaveCodeModules

End Sub

मैं अगले कुछ हफ्तों में इस वर्कफ़्लो में बस जाऊंगा, और अगर मुझे कोई समस्या हो तो पोस्ट करूँगा।

VBComponent कोड साझा करने के लिए धन्यवाद!


5
जब आप पुन: आयात कर रहे हों, तो आप मॉड्यूल प्रकार की जांच भी कर सकते हैं। ThisWorkbook.VBProject.VBCompords.Item (i)। टाइप एक मानक मॉड्यूल के लिए 1, क्लास मॉड्यूल के लिए 2, उपयोगकर्ता के लिए 3 और दस्तावेज़ मॉड्यूल (या तो वर्कबुक या शीट) के लिए 100 है।
जॉन क्रोवेल

4
आयात कोड में एक बग है। चूंकि आप मॉड्यूल हटा रहे हैं और आयात कर रहे हैं, इसलिए यह मॉड्यूल के क्रम को बदल देता है ताकि आप हर बार कुछ याद कर रहे हों। आपको सरणी के माध्यम से पीछे जाने के लिए फॉर लूप को बदलना होगा। उदाहरण के लिए i = .VBCompords.Count To 1 Step -1
Tmdean

2
Excel 2013 में ट्रस्ट सेंटर में "VBA प्रोजेक्ट ऑब्जेक्ट मॉडल में ट्रस्ट एक्सेस" को सक्षम करना आवश्यक है, अन्यथा यदि आप इस कोड को चलाने का प्रयास करते हैं, तो आपको बहुत ही बेकार त्रुटि 1004 मिलती है।
रॉबिन ग्रीन

8
ऊपर यह लिपि परिपूर्ण से बहुत दूर है। ImportCodeModules () उप छोटी गाड़ी है और डुप्लिकेट मॉड्यूल का उत्पादन करती है। इसके अलावा, आपको खुली और पहले की घटनाओं को जोड़ने के लिए हर एक कार्यपुस्तिका को संपादित करने की आवश्यकता होगी। यह अस्वीकार्य है। लंबे समय तक वेब पर खोज करने के बाद, मैंने आखिरकार कुछ ऐसा पाया है जो वास्तव में काम करता है , (जो यहां संदर्भित है )। इसमें कोड आयात, निर्यात, कोड प्रारूपण और बहुत कुछ है। निर्यात स्वतः सहेजने पर होता है और किसी भी मौजूदा कार्यपुस्तिका को संपादित करने की आवश्यकता नहीं होती है।
कोडकिड

5
यह एक उत्कृष्ट खोज है! मैं अपनी स्क्रिप्ट के बजाय इसका उपयोग करने का सुझाव दूंगा। मैंने इसे एक बार लिखा था और थोड़ी देर के लिए इसका इस्तेमाल किया, यह मेरी जरूरतों को पूरा करता है। कोई व्यक्ति जो एक्सेल और VBA दैनिक का उपयोग करता है, उस निर्यात के लिए समर्पित एक कार्यक्रम या परियोजना बहुत अधिक उपयुक्त होगी। साझा करने के लिए धन्यवाद!
डेमॉस्टेनेक्स

42

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

भले ही आप TortoiseSVN का उपयोग न कर रहे हों, यह उपयोगी हो सकता है।


3
इतना आश्चर्यजनक है कि TortoiseSVN एक अंतर्निहित विशेषता के रूप में तुलना कर सकता है ^ ^
Nam G VU

2
वर्ड फाइल के साथ भी यही बात है?
नाम जी वीयू

3
मैंने अभी-अभी परीक्षण किया है - यह वर्ड फाइल के लिए भी उपलब्ध है। कूल ^ ^
G पर Nam G VU

यह VB कोड के लिए काम नहीं करता है। उसके लिए कोई उपाय?
मनप्रीत सिंह

10

मुझे संक्षेप में बताएं कि आप संस्करण नियंत्रण के लिए क्या करना चाहते हैं और क्यों:

  1. क्या:

    • कोड (VBA)
    • स्प्रेडशीट (सूत्र)
    • स्प्रैडशीट (मूल्य)
    • चार्ट
    • ...
  2. क्यों:

    • हिसाब सूचि
    • सहयोग
    • संस्करण तुलना ("भिन्न")
    • विलय

जैसा कि अन्य लोगों ने यहां पोस्ट किया है, मौजूदा संस्करण नियंत्रण प्रणालियों के शीर्ष पर कुछ समाधान हैं:

  • Git
  • अस्थिर
  • विनाश
  • बाजार

यदि आपकी एकमात्र चिंता आपकी कार्यपुस्तिकाओं में VBA कोड है, तो प्रस्ताव Demosthenex ऊपर प्रस्ताव या VbaGit ( https://github.com/brucemcpherson/VbaGit ) बहुत अच्छी तरह से काम कर रहा है और कार्यान्वित करने के लिए अपेक्षाकृत सरल है। लाभ यह है कि आप अच्छी तरह से सिद्ध किए गए संस्करण नियंत्रण प्रणालियों पर भरोसा कर सकते हैं और अपनी आवश्यकताओं के अनुसार एक का चयन कर सकते हैं ( https://help.github.com/articles/what-are-the-differences-between-svn-and पर एक नज़र डालें) -git / Git और तोड़फोड़ के बीच एक संक्षिप्त तुलना के लिए ।

यदि आप न केवल कोड के बारे में बल्कि अपनी शीट में डेटा ("हार्डकोड" मान और सूत्र परिणाम) के बारे में भी चिंता करते हैं, तो आप इसके लिए एक समान रणनीति का उपयोग कर सकते हैं: अपनी शीट की सामग्री को कुछ पाठ प्रारूप (रेंज.वैल्यू के माध्यम से) में सीरियल करें। और मौजूदा संस्करण नियंत्रण प्रणाली का उपयोग करें। यहाँ इस बारे में एक बहुत अच्छा ब्लॉग पोस्ट है: https://wiki.ucl.ac.uk/display/~ucftpw2/2013/10/18/Using+git+for+version+control+of+spreadsheet+models++part + 1 + 3

हालाँकि, स्प्रेडशीट तुलना एक गैर-तुच्छ एल्गोरिथम समस्या है। आस-पास कुछ उपकरण हैं, जैसे Microsoft की स्प्रेडशीट तुलना ( https://support.office.com/en-us/article/Overview-of-Spreadsheet-Compare-13fafa61-62aa-451b-8674-24ce5f2c986 ), Exceldiff () http://exceldiff.arstdesign.com/ ) और DiffEngineX ( https://www.florencesoft.com/compare-excel-workbooks-differences.html )। लेकिन Git जैसी संस्करण नियंत्रण प्रणाली के साथ इन तुलनाओं को एकीकृत करना एक और चुनौती है।

अंत में, आपको एक वर्कफ़्लो पर समझौता करना होगा जो आपकी आवश्यकताओं के अनुरूप हो। एक्सेल वर्कफ़्लो के लिए एक सरल, एकीकृत Git के लिए, https://www.xltrail.com/blog/git-workflow-for-excel पर एक नज़र डालें ।


2020 अद्यतन: के अपने सुझाव के लिए upvoted xltrail.com/git-xl प्रतिबद्ध के बीच VBA स्रोत diff उत्पादन एक खुला स्रोत Git विस्तार, हालांकि सीमित है, मुझे त्रुटि प्रवण आयात और निर्यात से बचाता है
chingNotCHing

9

यह निर्भर करता है कि आप डेटा के बारे में बात कर रहे हैं, या स्प्रेडशीट के भीतर मौजूद कोड। जबकि मेरे पास Microsoft के विज़ुअल सोर्ससेफ़ के प्रति तीव्र नापसंद है और सामान्य रूप से इसकी अनुशंसा नहीं की जाती है, यह एक्सेस और एक्सेल दोनों के साथ आसानी से एकीकृत करता है, और मॉड्यूल के स्रोत नियंत्रण प्रदान करता है।

[वास्तव में एक्सेस के साथ एकीकरण में व्यक्तिगत वस्तुओं के रूप में प्रश्न, रिपोर्ट और मॉड्यूल शामिल हैं जिन्हें संस्करण बनाया जा सकता है]

MSDN लिंक यहाँ है


4
बेहतर रखे गए रहस्यों में से एक - मुझे नहीं पता था कि वीएसएस ऐसा कर सकता है। +1
कंसर्नडऑफटुनब्रिजवेल्स

मुझे नहीं पता था कि न तो। लेकिन वैसे भी, वीएसएस s..t का एक ढेर है और मैं इससे दूर रहूंगा।
जीयूआई जंकाई

मैं सभी उत्साहित हो गया और इसके लिए नेट खंगालने में एक घंटा बिताया, लेकिन ऐसा लगता है कि एमएस ने एक्सेल 2003 में इसका समर्थन करना बंद कर दिया। यदि आप एक्सेस वीबीए के साथ काम कर रहे हैं तो आप भाग्य में हो सकते हैं, लेकिन मैंने नहीं देखा।
फसल ३१६

1
आप Office डेवलपर संस्करण ऐड-इन का उपयोग करने में सक्षम हो सकते हैं?: brandon.fuller.name/archives/2003/11/07/10.26.30
मिच गेहूं

7

मैं एक ऐसे उपकरण के बारे में नहीं जानता जो यह अच्छी तरह से करता है लेकिन मैंने विभिन्न प्रकार के घरेलू समाधानों को देखा है। इनमें से सामान्य धागा पारंपरिक नियंत्रण प्रणालियों की शक्ति का लाभ उठाने के लिए संस्करण नियंत्रण के तहत द्विआधारी डेटा को कम करने और पाठ्य डेटा को अधिकतम करने के लिए है। यह करने के लिए:

  • कार्यपुस्तिका को किसी अन्य अनुप्रयोग की तरह व्यवहार करें। अलग तर्क, विन्यास और डेटा।
  • कार्यपुस्तिका से अलग कोड।
  • UI को प्रोग्रामेटिक रूप से बनाएँ।
  • वर्कबुक को फिर से बनाने के लिए एक बिल्ड स्क्रिप्ट लिखें।

इस सभी बकवास के माध्यम से क्यों जाएं जब आपको ज़रूरत है एक स्रोत नियंत्रण है जो बाइनरी ऑब्जेक्ट्स को संभालता है? एसवीएन यह कर सकता है।
अज्ञात कोडर

15
क्योंकि आप द्विआधारी वस्तुओं
igelineau

6

@Demosthenex वर्क, @Tmdean और @Jon Crowell की अमूल्य टिप्पणियों पर काम करना! (उन्हें +1 करें)

मैं कार्यपुस्तिका स्थान के पास git \ dir में मॉड्यूल फ़ाइलों को सहेजता हूं। उसे अपनी पसंद के हिसाब से बदलें।

यह कार्यपुस्तिका कोड में परिवर्तनों को ट्रैक नहीं करेगा। तो यह आपके लिए है कि आप उन्हें सिंक्रोनाइज़ करें।

Sub SaveCodeModules()

'This code Exports all VBA modules
Dim i As Integer, name As String

With ThisWorkbook.VBProject
    For i = .VBComponents.count To 1 Step -1
        If .VBComponents(i).Type <> vbext_ct_Document Then
            If .VBComponents(i).CodeModule.CountOfLines > 0 Then
                name = .VBComponents(i).CodeModule.name
                .VBComponents(i).Export Application.ThisWorkbook.Path & _
                                            "\git\" & name & ".vba"
            End If
        End If
    Next i
End With

End Sub

Sub ImportCodeModules()
Dim i As Integer
Dim ModuleName As String

With ThisWorkbook.VBProject
    For i = .VBComponents.count To 1 Step -1

        ModuleName = .VBComponents(i).CodeModule.name

        If ModuleName <> "VersionControl" Then
            If .VBComponents(i).Type <> vbext_ct_Document Then
                .VBComponents.Remove .VBComponents(ModuleName)
                .VBComponents.Import Application.ThisWorkbook.Path & _
                                         "\git\" & ModuleName & ".vba"
            End If
        End If
    Next i
End With

End Sub

और फिर वर्कबुक मॉड्यूल में:

Private Sub Workbook_Open()

    ImportCodeModules

End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

    SaveCodeModules

End Sub

6

@Demosthenex का उत्तर देना एक कदम आगे बढ़ाता है, यदि आप अपने Microsoft Excel ऑब्जेक्ट और UserForms में कोड का ट्रैक रखना चाहते हैं, तो आपको थोड़ा मुश्किल होना होगा।

पहले मैंने अपने SaveCodeModules()फ़ंक्शन को निर्यात करने की योजना के विभिन्न प्रकारों के लिए खाता बदल दिया :

Sub SaveCodeModules(dir As String)

'This code Exports all VBA modules
Dim moduleName As String
Dim vbaType As Integer

With ThisWorkbook.VBProject
    For i = 1 To .VBComponents.count
        If .VBComponents(i).CodeModule.CountOfLines > 0 Then
            moduleName = .VBComponents(i).CodeModule.Name
            vbaType = .VBComponents(i).Type

            If vbaType = 1 Then
                .VBComponents(i).Export dir & moduleName & ".vba"
            ElseIf vbaType = 3 Then
                .VBComponents(i).Export dir & moduleName & ".frm"
            ElseIf vbaType = 100 Then
                .VBComponents(i).Export dir & moduleName & ".cls"
            End If

        End If
    Next i
End With

End Sub

UserForms को VBA कोड की तरह ही निर्यात और आयात किया जा सकता है। फर्क सिर्फ इतना है कि एक फॉर्म एक्सपोर्ट होने पर दो फाइलें बनाई जाएंगी (आपको ए .frmऔर ए मिल जाएंगे.frx प्रत्येक UserForm के लिए फाइल )। इनमें से एक आपके द्वारा लिखे गए सॉफ़्टवेयर को रखता है और दूसरा एक बाइनरी फ़ाइल है जो (मुझे पूरा यकीन है) फॉर्म के लेआउट को परिभाषित करता है।

माइक्रोसॉफ्ट एक्सेल ऑब्जेक्ट्स (meos) (अर्थ Sheet1, Sheet2, ThisWorkbookआदि) एक के रूप में निर्यात किया जा सकता .clsफ़ाइल। हालाँकि, जब आप इस कोड को अपनी कार्यपुस्तिका में वापस लाना चाहते हैं, यदि आप इसे उसी तरह आयात करने का प्रयास करते हैं जिस तरह से आप VBA मॉड्यूल हैं, तो आपको एक त्रुटि मिलेगी यदि वह शीट पहले से ही कार्यपुस्तिका में मौजूद है।

इस समस्या को हल करने के लिए, मैंने एक्सेल में .cls फ़ाइल को आयात करने का प्रयास नहीं करने का निर्णय लिया, लेकिन .clsफ़ाइल को स्ट्रिंग के रूप में एक्सेल में पढ़ने के लिए , फिर इस स्ट्रिंग को खाली MEO में पेस्ट करें। यहाँ मेरा ImportCodeModules है:

Sub ImportCodeModules(dir As String)

Dim modList(0 To 0) As String
Dim vbaType As Integer

' delete all forms, modules, and code in MEOs
With ThisWorkbook.VBProject
    For Each comp In .VBComponents

        moduleName = comp.CodeModule.Name

        vbaType = .VBComponents(moduleName).Type

        If moduleName <> "DevTools" Then
            If vbaType = 1 Or _
                vbaType = 3 Then

                .VBComponents.Remove .VBComponents(moduleName)

            ElseIf vbaType = 100 Then

                ' we can't simply delete these objects, so instead we empty them
                .VBComponents(moduleName).CodeModule.DeleteLines 1, .VBComponents(moduleName).CodeModule.CountOfLines

            End If
        End If
    Next comp
End With

' make a list of files in the target directory
Set FSO = CreateObject("Scripting.FileSystemObject")
Set dirContents = FSO.getfolder(dir) ' figure out what is in the directory we're importing

' import modules, forms, and MEO code back into workbook
With ThisWorkbook.VBProject
    For Each moduleName In dirContents.Files

        ' I don't want to import the module this script is in
        If moduleName.Name <> "DevTools.vba" Then

            ' if the current code is a module or form
            If Right(moduleName.Name, 4) = ".vba" Or _
                Right(moduleName.Name, 4) = ".frm" Then

                ' just import it normally
                .VBComponents.Import dir & moduleName.Name

            ' if the current code is a microsoft excel object
            ElseIf Right(moduleName.Name, 4) = ".cls" Then
                Dim count As Integer
                Dim fullmoduleString As String
                Open moduleName.Path For Input As #1

                count = 0              ' count which line we're on
                fullmoduleString = ""  ' build the string we want to put into the MEO
                Do Until EOF(1)        ' loop through all the lines in the file

                    Line Input #1, moduleString  ' the current line is moduleString
                    If count > 8 Then            ' skip the junk at the top of the file

                        ' append the current line `to the string we'll insert into the MEO
                        fullmoduleString = fullmoduleString & moduleString & vbNewLine

                    End If
                    count = count + 1
                Loop

                ' insert the lines into the MEO
                .VBComponents(Replace(moduleName.Name, ".cls", "")).CodeModule.InsertLines .VBComponents(Replace(moduleName.Name, ".cls", "")).CodeModule.CountOfLines + 1, fullmoduleString

                Close #1

            End If
        End If

    Next moduleName
End With

End Sub

यदि आप dirइन दोनों फ़ंक्शंस के इनपुट से भ्रमित हैं , तो यह केवल आपका कोड रिपॉजिटरी है! इसलिए, आप इन कार्यों को कॉल करेंगे:

SaveCodeModules "C:\...\YourDirectory\Project\source\"
ImportCodeModules "C:\...\YourDirectory\Project\source\"

एक त्वरित टिप्पणी: मुझे बाइनरी फ़ाइलों के कारण UserForms के साथ सही संस्करण नियंत्रण करने का कोई भाग्य नहीं था। यदि आप अपने git रेपो में कई शाखाएँ बनाते हैं, तो आप उन्हें विलय करने में असमर्थ हो सकते हैं यदि आप UserForms के साथ काम कर रहे हैं
dslosky

5

मैं git का उपयोग करता हूं , और आज मैंने इसे (git-xlsx-textconv) पायथन में पोर्ट कर लिया है, क्योंकि मेरा प्रोजेक्ट पायथन कोड पर आधारित है, और यह एक्सेल फाइलों के साथ इंटरैक्ट करता है। यह कम से कम .xlsx फ़ाइलों के लिए काम करता है , लेकिन मुझे लगता है कि यह .xls के लिए भी काम करेगा । यहाँ जीथब लिंक है। मैंने दो संस्करणों को लिखा, एक अपनी पंक्ति में प्रत्येक पंक्ति के साथ, और दूसरा जहां प्रत्येक कोशिका अपनी लाइन पर है (उत्तरार्द्ध लिखा गया था क्योंकि गिट डिफॉल्ट डिफ़ॉल्ट रूप से लंबी लाइनों को लपेटना पसंद नहीं करता है, कम से कम यहां विंडोज पर)।

यह मेरी .gitconfig फ़ाइल है (यह अलग स्क्रिप्ट को मेरी परियोजना के रेपो में रहने की अनुमति देता है):

[diff "xlsx"]
    binary = true
    textconv = python `git rev-parse --show-toplevel`/src/util/git-xlsx-textconv.py

यदि आप चाहते हैं कि स्क्रिप्ट कई अलग-अलग रिपोज के लिए उपलब्ध हो, तो कुछ इस तरह का उपयोग करें:

[diff "xlsx"]
    binary = true
    textconv = python C:/Python27/Scripts/git-xlsx-textconv.py

मेरी .gitattributes फ़ाइल:

*.xlsx diff=xlsx

3

एक चीज़ जो आप कर सकते हैं वह यह है कि आपकी वर्कबुक में निम्नलिखित स्निपेट हों:

Sub SaveCodeModules()

'This code Exports all VBA modules
Dim i%, sName$

    With ThisWorkbook.VBProject
        For i% = 1 To .VBComponents.Count
            If .VBComponents(i%).CodeModule.CountOfLines > 0 Then
                sName$ = .VBComponents(i%).CodeModule.Name
                .VBComponents(i%).Export "C:\Code\" & sName$ & ".vba"
            End If
        Next i
    End With
End Sub

मुझे यह स्निपेट इंटरनेट पर मिला।

बाद में, आप संस्करण नियंत्रण बनाए रखने के लिए सबवर्सन का उपयोग कर सकते हैं। VBA के भीतर 'शेल' कमांड के साथ तोड़फोड़ की कमांड लाइन इंटरफेस का उपयोग करके उदाहरण के लिए। वह ऐसा करेगा। मैं खुद भी ऐसा करने की सोच रहा हूँ :)


मुझे लगता है कि यह एक उत्कृष्ट दृष्टिकोण है। एक्सेल कोड का स्रोत नियंत्रण केवल अपघटन के साथ हो सकता है। यह एक बिल्ड अप्रोच का भी अनुमान लगाएगा। कोड क्लीनर उदाहरण के लिए ऐसा कर सकता है (फ्रीवेयर मुझे विश्वास है) appspro.com/Utilities/CodeCleaner.htm लेकिन समान रूप से आपका कोड बराबर है।
पॉलीग्लॉट

मैंने मैक 2011 संस्करण 14.4.1 के लिए Microsoft® Excel® का उपयोग करके काम करने के लिए इसे संशोधित करने का प्रयास किया। निर्यात विधि को कॉल करने वाली रेखा चुपचाप कुछ भी नहीं करती है (भले ही मेरे द्वारा उपयोग किए गए अच्छी तरह से गठित ओएस एक्स निर्देशिकाओं की परवाह किए बिना)।
डीए विंसेंट


2

यदि आप Sharepoint की तुलना में नियमित रूप से कार्यालय गैर तकनीकी उपयोगकर्ताओं के साथ एक कार्यालय सेटिंग देख रहे हैं तो एक व्यवहार्य विकल्प है। आप दस्तावेज़ फ़ोल्डर को संस्करण नियंत्रण सक्षम और चेकइन और चेकआउट के साथ सेटअप कर सकते हैं। यह नियमित रूप से कार्यालय उपयोगकर्ताओं के लिए स्वतंत्र रूप से बनाता है।


2

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


1

एसवीएन या सीवीएस जैसे किसी भी मानक संस्करण नियंत्रण उपकरण का उपयोग करें। सीमाएँ उद्देश्य पर निर्भर करती हैं। रिपॉजिटरी के आकार में एक छोटी सी वृद्धि के अलावा, मैंने किसी भी मुद्दे का सामना नहीं किया


1

आपको DiffEngineX आज़माना चाहिए। इसे प्रोग्रामेटिक रूप से भी कहा जा सकता है और कमांड लाइन से कमांड लाइन तर्क भी ले सकते हैं। यह न केवल एक्सेल स्प्रेडशीट कोशिकाओं की तुलना करता है, बल्कि कार्यपुस्तिकाओं में एम्बेडेड विज़ुअल बेसिक मैक्रो भी है। एक्सेल परिभाषित नाम और टिप्पणियों की तुलना भी करता है, जिसमें बहुत सारे फ्रीवेयर उपकरण छूट जाते हैं। इससे डाउनलोड किया जा सकता है

http://www.florencesoft.com/excel-differences-download.html

मुझे यकीन है कि आपके संस्करण नियंत्रण प्रणाली में एक विकल्प या बॉक्स है, जिससे आप अपने मूल और संशोधित एक्सेल वर्कबुक के साथ स्वचालित रूप से DiffEngineX को कॉल कर सकते हैं।


12
आपको अपने उत्तर में उल्लेख करना चाहिए कि आप इस व्यावसायिक उत्पाद से संबद्ध हैं।
हंस ओल्सन

1

मैं इस पर भी गौर कर रहा हूं। ऐसा लगता है कि नवीनतम टीम फाउंडेशन सर्वर 2010 में एक एक्सेल ऐड-इन हो सकता है।

यहाँ एक सुराग है:

http://team-foundation-server.blogspot.com/2009/07/tf84037-there-was-problem-initializing.html


TFS इसमें एक्सेल का भारी उपयोग करता है, जो काम की रिपोर्टिंग में होता है, यह दुर्भाग्य से एक्सेल फाइल को सोर्स कंट्रोल में लाने से संबंधित नहीं है।
ब्रैड आर

1

उम्र की खोज करने और कई अलग-अलग साधनों की कोशिश करने के बाद, मैंने अपने उत्तर को vba संस्करण नियंत्रण समस्या के लिए यहां पाया है: https://stackoverflow.com/a/25984759/2780179

यह एक सरल एक्सेल ऐडिन है जिसके लिए कोड यहां पाया जा सकता है

आयात करने के बाद कोई डुप्लिकेट मॉड्यूल नहीं हैं। यह आपके कोड को स्वचालित रूप से निर्यात करता है, जैसे ही आप अपनी कार्यपुस्तिका को सहेजते हैं, बिना किसी मौजूदा कार्यपुस्तिका को संशोधित किए । यह एक vba कोड फॉर्मेटर के साथ आता है।


1

वास्तव में मैक्रो कोड में परिवर्तनों को ट्रैक करने और तुलना करने के लिए केवल कुछ मुट्ठी भर समाधान हैं - उनमें से ज्यादातर का नाम पहले से ही यहां दिया गया था। मैं वेब ब्राउज़ कर रहा हूं और इस नए टूल का उल्लेख करने लायक है:

XLTools संस्करण VBA मैक्रोज़ के लिए नियंत्रण

  • एक्सेल शीट और VBA मॉड्यूल के लिए संस्करण नियंत्रण
  • किसी संस्करण को करने से पहले परिवर्तनों का पूर्वावलोकन और अंतर करें
  • एक ही फ़ाइल पर कई उपयोगकर्ताओं के सहयोगात्मक कार्य के लिए महान (ट्रैक किसने / कब / टिप्पणी को बदल दिया)
  • संस्करणों की तुलना करें और कोड लाइन-बाय-लाइन में परिवर्तन को हाइलाइट करें
  • उन उपयोगकर्ताओं के लिए उपयुक्त है जो उस मामले के लिए तकनीक-प्रेमी या एक्सेल-प्रेमी नहीं हैं
  • संस्करण इतिहास अपने पीसी पर गिट-भंडार में संग्रहीत किया जाता है - किसी भी संस्करण को आसानी से पुनर्प्राप्त किया जा सकता है

VBA कोड संस्करण साथ-साथ बदलते हैं, परिवर्तनों की कल्पना की जाती है


0

आपने संस्करण नियंत्रण के लिए ज़िप कंटेनर (.xlsx और .xslm) में Microsoft के एक्सेल XML का उपयोग करने की कोशिश की होगी और पाया कि vba को vbaProject.bin में संग्रहीत किया गया था (जो संस्करण नियंत्रण के लिए बेकार है)।

समाधान सरल है।

  1. LibreOffice Calc के साथ एक्सेल फ़ाइल खोलें
  2. लिब्रे ऑफिस Calc में
    1. फ़ाइल
    2. के रूप रक्षित करें
    3. प्रकार के रूप में सहेजें: ODF स्प्रैडशीट (.ods)
  3. बंद लिब्रे ऑफिस Calc
  4. .ods से .zip तक नई फ़ाइल के फ़ाइल एक्सटेंशन का नाम बदलें
  5. एक जीआईटी बनाए हुए क्षेत्र में स्प्रेडशीट के लिए एक फ़ोल्डर बनाएं
  6. यह जीआईटी फ़ोल्डर में ज़िप निकालें
  7. GIT के लिए प्रतिबद्ध

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


2
यह दृष्टिकोण हालांकि जोखिम से भरा है। यदि आप बाद में एक्सेल में एक सुविधा का उपयोग करते हैं जो या तो लिबर में लागू नहीं होती है या जो लिब्रे के लिए "मैप" नहीं करती है और सही तरीके से वापस आती है, तो यह दृष्टिकोण टूट जाएगा। यह काम करेगा, मुझे यकीन है, साधारण स्प्रैडशीट्स के लिए, लेकिन अत्यधिक सावधानी बरतनी चाहिए। पीडब्लू
फिल विटिंगटन

0

बियॉन्ड कम्पेयर नाम का एक प्रोग्राम भी है जिसकी एक्सेल फाइल काफी अच्छी है। मुझे चीनी में एक स्क्रीनशॉट मिला जो संक्षेप में यह दिखाता है:

तुलना से परे - दो एक्सेल फ़ाइलों की तुलना (चीनी)
मूल छवि स्रोत

उनके पेज पर 30 दिन का ट्रायल चल रहा है


0

मुझे इस सवाल का बहुत ही सरल समाधान मिला जो मेरी जरूरतों को पूरा करता है। मैं अपने सभी मैक्रोज़ के निचले भाग में एक पंक्ति जोड़ता हूं, जो *.txtहर बार चलने पर पूरे मैक्रो कोड के साथ एक फ़ाइल निर्यात करता है। कोड:

ActiveWorkbook.VBProject.VBComponents("moduleName").Export"C:\Path\To\Spreadsheet\moduleName.txt"

( टॉम के ट्यूटोरियल्स पर पाया गया , जिसमें कुछ सेटअप शामिल हैं जिन्हें आपको यह काम करने की आवश्यकता हो सकती है।)

जब भी मैं कोड पर काम कर रहा हूं, मैं हमेशा मैक्रो को चलाऊंगा, मुझे गारंटी है कि परिवर्तन में परिवर्तन होगा। केवल कष्टप्रद हिस्सा यह है कि अगर मुझे पहले वाले संस्करण की जांच करने की आवश्यकता है, तो मुझे *.txtस्प्रेडशीट में मैन्युअल रूप से कॉपी / पेस्ट करना होगा।


-1

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


-1

इसे अधिकांश वीसीएस के साथ काम करना चाहिए (अन्य मानदंडों के आधार पर आप एसवीएन, सीवीएस, डार्क्स, टीएफएस, आदि का चयन कर सकते हैं), हालांकि यह वास्तव में पूरी फाइल होगी (क्योंकि यह एक द्विआधारी प्रारूप है), जिसका अर्थ है कि "क्या बदला" सवाल। जवाब देना इतना आसान नहीं है।

यदि आप लोग उन्हें पूरा करते हैं, तो आप अभी भी लॉग संदेशों पर भरोसा कर सकते हैं, लेकिन आप कुछ और दृश्यता प्राप्त करने के लिए Office 2007 से नए XML आधारित स्वरूपों को भी आज़मा सकते हैं (हालाँकि अभी भी XML के टन के माध्यम से खरपतवार करना मुश्किल होगा, प्लस XML फ़ाइल AFAIK डिस्क पर ज़िप किया गया है, इसलिए आपको पाठ को सही ढंग से काम करने के लिए इसे अनज़िप करने के लिए पूर्व-प्रतिबद्ध हुक की आवश्यकता होगी)।


-1

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

नोट: यह एक मैक्रो सक्षम कार्यपुस्तिका है जिसे आपको मेरी साइट से डाउनलोड करने के लिए साइन इन करना होगा (आप ओपनआईडी का उपयोग कर सकते हैं)

सभी कोड अनलॉक है।

Rev नियंत्रित स्प्रैडशीट


-1

मेरी कंपनी Microsoft Office समाधानों को स्वचालित करने में काफी काम करती है इसलिए मैंने एक .DLL लिखा है जो किसी टेम्पलेट के सहेजे जाने पर समाधान के स्रोत को निर्यात करेगा। यह फ़ोल्डर के एक बच्चे के रूप में स्रोत नाम का एक फ़ोल्डर बनाता है जहां टेम्पलेट सहेजा जाता है, और स्रोत के नीचे यह VBA प्रोजेक्ट के समान नाम वाला एक फ़ोल्डर बनाता है। प्रोजेक्ट फ़ोल्डर में यह मॉड्यूल, क्लासेस, और उपयोगकर्ता प्रपत्रों के लिए सभी स्रोत कोड निर्यात करता है। टेम्प्लेट के बड़े संग्रह के लिए स्रोत का प्रबंधन करना आसान बनाने के लिए इस व्यवस्था को चुना गया था। यदि आपके पास स्थानीय कॉन्फ़िगरेशन फ़ाइल या कोई वैश्विक कॉन्फ़िगरेशन फ़ाइल उपलब्ध है, तो DLL VBA प्रोजेक्ट तक पहुँच प्राप्त करने के लिए अवरोधित प्रोजेक्ट्स को अनलॉक करने में सक्षम है। उपयोग में इस उपकरण के साथ, डेवलपर्स अपने दिल की सामग्री के लिए टेम्पलेट्स पर काम कर सकते हैं और अपने काम को प्रबंधित करने के लिए अपने पसंदीदा संशोधन नियंत्रण उपकरण का उपयोग कर सकते हैं।


चाड - मैं इस पोस्ट को पढ़ने की सलाह देता हूं, जिनमें से मुझे हाल ही में अवगत कराया गया था: stackoverflow.com/help/promotion । आपका जवाब "बताओ मत - शो!" सिद्धांत। आप अपनी कंपनी और आपके साथ आए एक समाधान के बारे में बात करते हैं, और एक DLL के लिए कई संदर्भ बनाते हैं, लेकिन आप हमें यह नहीं दिखाते हैं कि आपने यह कैसे किया या DLL तक पहुंच भी प्रदान की। जैसे, यह उत्तर इस वेबसाइट की भावना में नहीं है।
कोलम भंडाल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.