2012-06-14 4 views
6

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

मुझे आश्चर्य है कि क्या मैं किसी प्रकार की सी # उपयोगिता लिख ​​सकता हूं जो उन फ़ाइलों को एक-एक करके या तो .NET-Office इंटरऑप के साथ लोड करता है। या कोई अन्य दृष्टिकोण उन तारों को किसी अन्य चीज़ से प्रतिस्थापित करता है ... सिर्फ इसलिए कि मुझे उन सभी वीबीए मैक्रोज़ को किसी अन्य सर्वर नाम पर दोबारा दर्ज करना होगा और एक और एसक्यूएल लॉगिन नाम और पासवर्ड का उपयोग करना होगा ... मैं वास्तव में इस प्रतिस्थापन को नहीं करना चाहता हाथ :(:(:(

धन्यवाद!

+0

+ 1 अच्छा प्रश्न :) मैं VBA कोड तैयार होगा कि मदद है या आप एक सी # कोड विशेष रूप से चाहते हैं:

आप घटकों निर्यात करने के लिए इस तरह इस कोड का उपयोग कर सकते हैं? यदि आप सी # चाहते हैं तो मुझे इसे संशोधित करना होगा और इसे पोस्ट करने से पहले इसे सी # में जांचना होगा। –

+0

वीबीए कोड चलने वाला स्टैंडअलोन भी ठीक है, स्टैंडअलोन मेरा मतलब है कि या तो वीबीस्क्रिप्ट है या एक अलग एक्सेल फ़ाइल में, फिर आप फ़ाइल नामों को खोजने और बदलने के लिए कैसे पास करते हैं? यदि आप अपना वीबीए निश्चित रूप से साझा करते हैं तो मैं इसे वोट दूंगा क्योंकि उत्तर 100% या केवल सी # और .NET :) –

+2

वोटिंग चिंता नहीं है। :) हां, यह एक अलग एक्सेल फ़ाइल होगी जो आपको एक फ़ोल्डर चुनने देगी और फिर कोड उस फ़ोल्डर में सभी एक्सेल फ़ाइल में सभी वीबीए मॉड्यूल में प्रासंगिक टेक्स्ट को प्रतिस्थापित करेगा। –

उत्तर

10

पोस्टिंग में कुछ समय लग रहा है, लेकिन मैं इसके लिए एक यूआई बनाने गया था के लिए के साथ

क्षमा करें शुरू करने के लिए इतना है कि यह न केवल आप में मदद करता है लेकिन किसी और को, जो एक ही कार्यक्षमता की तलाश में आता है।

आप पहली बार Trust Access to the VBA project Object model

ओपन एक्सेल सक्षम और फ़ाइल टैब पर क्लिक करें की जरूरत है | विकल्प | ट्रस्ट सेंटर | ट्रस्ट सेंटर सेटिंग्स | मैक्रो सेटिंग्स

मैक्रो को सक्षम और पर Trust access to Visual Basic projects

enter image description here

अगला VBA संपादक उपकरण पर

क्लिक करें क्लिक करें | विकल्प और "संपादक" टैब के अंतर्गत चेकबॉक्स Require Variable Declaration

enter image description here

अगला चयन here से नमूना फ़ाइल डाउनलोड करें और बस के रूप में नीचे दिखाया गया userform लांच करने के लिए पत्रक 1 में Run बटन दबाएँ।

सरल उस फ़ोल्डर का चयन करें जिसमें केवल एक्सेल फ़ाइलें हैं।प्रासंगिक जानकारी दर्ज करें और Start Replace पर क्लिक करें और आप कर चुके हैं :)

enter image description here

कोड का इस्तेमाल किया

पत्रक 1 संहिता क्षेत्र

Option Explicit 

Private Sub CommandButton1_Click() 
    UserForm1.Show 
End Sub 

UserForm कोड क्षेत्र

Option Explicit 

Private Sub CommandButton1_Click() 
    Dim Ret 
    Ret = BrowseForFolder 
    If Ret = False Then Exit Sub 
    TextBox1.Text = Ret 
End Sub 

Private Sub CommandButton3_Click() 
    On Error GoTo Whoa 

    Dim wb As Workbook 
    Dim strPath As String, strfile As String 
    Dim strToReplaceWith As String, strToReplace As String 
    Dim i As Long, j As Long 

    Dim VBE As Object 

    strPath = TextBox1.Text & "\" 

    strfile = Dir(strPath) 

    While strfile <> "" 
     Set wb = Workbooks.Open(strPath & strfile) 

     Set VBE = ActiveWorkbook.VBProject 

     If VBE.VBComponents.Item(1).Properties("HasPassword").Value = False Then 
      If VBE.VBComponents.Count > 0 Then 
       For i = 1 To VBE.VBComponents.Count 
        VBE.VBComponents.Item(i).Activate 

        If VBE.VBE.CodePanes.Item(i).CodeModule.CountOfLines > 0 Then 
         For j = 1 To VBE.VBE.CodePanes.Item(i).CodeModule.CountOfLines 
          If InStr(1, VBE.VBE.CodePanes.Item(i).CodeModule.Lines(j, 1), TextBox2.Text, vbTextCompare) Then 
           strToReplace = VBE.VBE.CodePanes.Item(i).CodeModule.Lines(j, 1) 
           strToReplaceWith = Replace(strToReplace, TextBox2.Text, TextBox3.Text, 1, 1, vbTextCompare) 
           VBE.VBE.CodePanes.Item(i).CodeModule.ReplaceLine j, strToReplaceWith 
          End If 
         Next 
        End If 
       Next i 
      End If 
     End If 

     wb.Close True 

     strfile = Dir 
    Wend 

LetsContinue: 
    Application.ScreenUpdating = True 
    Exit Sub 
Whoa: 
    MsgBox Err.Description 
    Resume LetsContinue 
End Sub 

'~~> Function to pop the browse folder dialog 
Function BrowseForFolder(Optional OpenAt As Variant) As Variant 
    Dim ShellApp As Object 

    '~~> Create a file browser window at the default folder 
    Set ShellApp = CreateObject("Shell.Application"). _ 
    BrowseForFolder(0, "Please choose a folder", 0, OpenAt) 

    '~~> Set the folder to that selected. (On error in case cancelled) 
    On Error Resume Next 
    BrowseForFolder = ShellApp.self.Path 
    On Error GoTo 0 

    '~~> Destroy the Shell Application 
    Set ShellApp = Nothing 

    Select Case Mid(BrowseForFolder, 2, 1) 
    Case Is = ":" 
     If Left(BrowseForFolder, 1) = ":" Then GoTo Invalid 
    Case Is = "\" 
     If Not Left(BrowseForFolder, 1) = "\" Then GoTo Invalid 
    Case Else 
     GoTo Invalid 
    End Select 

    Exit Function 

Invalid: 
    BrowseForFolder = False 
End Function 

Private Sub CommandButton4_Click() 
    Unload Me 
End Sub 

और स्नैपशॉट

enter image description here

फ़ाइल किसका कोड की जरूरत है के बाद मैक्रो चलाया जाता है से पहले मैक्रो चलाया जाता है

enter image description here

को बदला जाएगा

enter image description here

संपादित

वैकल्पिक फ़ाइल डाउनलोड स्थान

मामले ऊपर wikisend लिंक मर जाता है में, फ़ाइल से here

+0

आइडिया अच्छा है, मुझे एक अवैध ordinal त्रुटि मिलती है, डीबग और ठीक हो जाएगी, बहुत बहुत धन्यवाद !! –

+0

आपको किस लाइन में त्रुटि मिलती है? 'त्रुटि पर जाओ Gooo Whoa' –

+0

' ऊपर दी गई मेरी पोस्ट में उल्लिखित दो बातें 'पर टिप्पणी करें' वीबीए प्रोजेक्ट ऑब्जेक्ट मॉडल 'ट्रस्ट एक्सेस' 2) 'फ़ोल्डर में केवल एक्सेल फाइलें होनी चाहिए' 3) 'मैं नहीं सोच सकता कोई अन्य कोड लाइन जो आपको त्रुटि दे सकती है। मैंने उत्तर पोस्ट करने से पहले इसे पूरी तरह से परीक्षण किया। –

5

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

इस तरह आप टेक्स्ट फ़ाइल को संपादित या प्रतिस्थापित करके किसी भी समय अपना एक्सेस डेटा बदल सकते हैं।

+0

यह एक अच्छा विचार है! –

0

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

Public Sub ExportAppSrcs(targetWb as Workbook) 
Dim wb As Workbook, Component As Object, Suffix As String, fileName As String 

Set wb = targetWb 
    For Each Component In wb.VBProject.VBComponents 

     Select Case Component.Type 
      Case 1     'modul 
       Suffix = ".bas" 
      Case 2     'class modul 
       Suffix = ".cls" 
      Case 3     'form 
       Suffix = ".frm" 
      Case 100    'dokument 
       Suffix = ".xwk" 
      Case Else 
       Suffix = "" 
     End Select 

     If Suffix <> "" Then 
      On Error Resume Next 
      fileName = wb.Path & "\spreadsheet.xlsm.src\" & Component.name & Suffix 
      Component.Export fileName 
     End If 
    Next 
End Sub 
संबंधित मुद्दे