we have several tens of macro enabled excel files, each of those contains few VBA modules and in each of those modules there are SQL server names and userid/passwords of the sql login.
I wonder if I could write some kind of C# utility which loads those files one by one and either with .NET-Office Interop. or any other approach replace those strings with something else... just because I have to repoint all those VBA macros to another server name and to use another sql login name and password... I really wouldn't like to do this replacement by hand :( :( :(
thanks!
Example #1 – VBA Find and Replace the WordStep 1: First, mention the Range of cells we are replacing. In this example, the range is from A1 to B15 so the code will be Range (“A1: B15”). Step 2: Now, put a dot to see the IntelliSense list. Step 3: Select the Replace method from the IntelliSense list.
The VBA REPLACE function is listed under the text category of VBA functions. When you use it in a VBA code, it replaces a substring from string with a new sub-string. In simple words, you can use REPLACE to replace a part of text with another text and it returns that new text in the result.
To begin With
Sorry for taking some time in posting but I was creating a UI for it so that it not only helps you but anyone else who comes looking for the same functionality.
You need to first enable Trust Access to the VBA project Object model
Open Excel and Click on File Tab | Options | Trust Center | Trust Center Settings | Macro Settings
Enable macro and click on Trust access to Visual Basic projects

Next In VBA Editor
Click on Tool | Options and under the "Editor" Tab select the checkbox Require Variable Declaration

Next Download the Sample file from here and simply press the Run Button In Sheet1 to launch the userform as shown below. 
Simple select the folder which has ONLY Excel Files. Enter the relevant info and click on Start Replace and you are done :)

Code Used
Sheet1 Code Area
Option Explicit
Private Sub CommandButton1_Click()
    UserForm1.Show
End Sub
Userform Code Area
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
MORE SNAPSHOTS

File Whose code needs to be replaced before the macro is Run

After the macro is run

EDIT
ALTERNATIVE FILE DOWNLOAD LOCATION
In case the above wikisend link dies, the file can be downloaded from here
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With