2012-06-14 53 views
6

chúng tôi có hàng chục tệp macro được bật macro, mỗi tệp chứa ít mô-đun VBA và trong mỗi mô-đun đó có tên máy chủ SQL và userid/mật khẩu của thông tin đăng nhập sql.Văn bản thay thế trong mã VBA của tệp Excel

Tôi tự hỏi liệu tôi có thể viết một số loại tiện ích C# để tải các tệp đó từng cái một và với .NET-Office Interop hay không. hoặc bất kỳ cách tiếp cận nào khác thay thế các chuỗi đó bằng thứ khác ... chỉ vì tôi phải bổ sung tất cả các macro VBA đó vào tên máy chủ khác và sử dụng tên đăng nhập và mật khẩu khác ... Tôi thực sự không muốn thay thế bằng Mặt :(:(:(

cảm ơn!

+0

+ 1 Câu hỏi Tốt :) Tôi có VBA Mã sẵn sàng sẽ giúp đỡ mà hay bạn muốn có một mã C# đặc biệt? Nếu bạn muốn C# sau đó tôi sẽ phải sửa đổi nó và kiểm tra nó trong C# trước khi tôi đăng nó. –

+0

Mã VBA chạy độc lập cũng ok, độc lập Tôi có nghĩa là hoặc là VBScript hoặc trong một tập tin excel tách ra, làm thế nào để bạn sau đó vượt qua các tên tập tin (s) để tìm kiếm và thay thế trong? Nếu bạn chia sẻ của bạn VBA chắc chắn tôi sẽ bỏ phiếu cho nó như là câu trả lời không phải là 100% hoặc chỉ C# và .NET :) –

+2

Bỏ phiếu không phải là một mối quan tâm. :) Có, nó sẽ là một tập tin Excel riêng biệt mà sẽ cho phép bạn chọn một thư mục và sau đó mã sẽ thay thế văn bản có liên quan trong tất cả các mô-đun VBA trong tất cả các tập tin excel trong thư mục đó. –

Trả lời

10

Để bắt đầu Với

Xin lỗi đã dành một số thời gian trong việc niêm yết nhưng tôi đã tạo ra một giao diện người dùng cho nó để nó không chỉ giúp bạn nhưng bất kỳ ai khác đến tìm kiếm các chức năng tương tự.

Bạn cần phải đầu tiên cho phép Trust Access to the VBA project Object model

mở Excel và nhấp vào File Tab | Tùy chọn | Trung tâm tin cậy | Cài đặt Trung tâm tin cậy | Cài đặt Macro

Enable vĩ mô và click vào Trust access to Visual Basic projects

enter image description here

Tiếp Trong VBA biên tập

Bấm vào Tool | Options và dưới "Editor" Tab chọn hộp kiểm Require Variable Declaration

enter image description here

Tiếp Tải file mẫu từ here và chỉ cần nhấn nút Run Trong Sheet1 để khởi động userform như hình dưới đây.

Đơn giản chọn thư mục có CHỈ Tệp Excel.Nhập các thông tin có liên quan và click vào Start Replace và bạn đã làm xong :)

enter image description here

Mã sử ​​dụng

Sheet1 mã vùng

Option Explicit 

Private Sub CommandButton1_Click() 
    UserForm1.Show 
End Sub 

UserForm Mã Diện tích

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 

Snapshots THÊM

enter image description here

file của ai mã cần phải được thay thế trước khi vĩ mô là Run

enter image description here

Sau vĩ mô đang chạy

enter image description here

EDIT

THAY THẾ FILE TẢI VỊ TRÍ

Trong trường hợp liên kết wikisend trên chết, tập tin có thể được tải về từ here

+0

Ý tưởng là tốt, tôi nhận được một lỗi thứ tự không hợp lệ, sẽ gỡ lỗi và sửa chữa, cảm ơn rất nhiều !! –

+0

Bạn nhận được lỗi nào trong Dòng? Bình luận dòng có nội dung 'Lỗi trên GoTo Whoa' –

+0

Hai thứ như đã đề cập trong bài viết của tôi ở trên' 1) 'Truy cập tin cậy vào mô hình đối tượng dự án VBA' 2) 'Thư mục chỉ nên có tệp Excel' 3) 'Tôi không thể nghĩ bất kỳ dòng mã nào khác có thể cho bạn lỗi. Tôi đã thử nghiệm nó hoàn toàn trước khi đăng câu trả lời. –

5

tôi đề nghị bạn tạo một tập tin cấu hình bao gồm tên máy chủ và các thông tin của bạn. Sau đó, bạn thêm một mô-đun cho mỗi file Excel của bạn mà phân tích tập tin cấu hình này khi khởi động và điền các biến toàn cầu với nó, bạn chỉ cần điều chỉnh các biến cho tên máy chủ, v.v. trong tất cả các mô-đun VBA của bạn thành các biến toàn cục mới.Bằng cách này, bạn có thể thay đổi dữ liệu truy cập của mình bất kỳ lúc nào bạn muốn bằng cách chỉnh sửa hoặc thay thế tệp văn bản.

+0

đây là một ý tưởng tuyệt vời! –

0

Tôi đề nghị cách này giải quyết vấn đề của bạn. Bạn có thể tạo dự án vba hoặc vbscript riêng biệt sẽ tải tất cả các bảng tính từng cái một, xuất nội dung của các dự án vba của họ để tách các tệp văn bản. Sau đó, bạn có thể tải các tệp văn bản đó và thực hiện thay thế chuỗi. Sau đó, bạn có thể nhập các tệp văn bản trở lại bảng tính dưới dạng thành phần dự án vba (bằng cách hoàn nguyên quy trình xuất).

Bạn có thể sử dụng mã này như thế này cho xuất khẩu các thành phần:

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 
Các vấn đề liên quan