zacząć
Niestety za poświęcenie trochę czasu opublikowania ale było stworzenie interfejsu użytkownika dla niego tak, że nie tylko pomaga, ale ktoś, kto przychodzi szuka tej samej funkcjonalności.
trzeba najpierw włączyć Trust Access to the VBA project Object model
Otwórz Excel i kliknij kartę Plik | Opcje | Centrum zaufania | Ustawienia Centrum zaufania | Ustawienia makro
Włącz makro i kliknij Trust access to Visual Basic projects
Następny w VBA Edytor
Kliknij na narzędzia | Opcje i pod „Edytor” Zakładka zaznacz pole wyboru Require Variable Declaration
Następny Pobierz przykładowy plik z here i wystarczy nacisnąć przycisk Run
W Arkusz1, aby uruchomić userform jak pokazano poniżej.
Wystarczy wybrać folder, który ma TYLKO plików Excel.Wpisz odpowiednie informacje i kliknij Start Replace
i gotowe :)
kod używany
Arkusz1 numerem kierunkowym
Option Explicit
Private Sub CommandButton1_Click()
UserForm1.Show
End Sub
kodu UserForm palących
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
WIĘCEJ Migawki
którego kod musi zostać wymieniona przed makro jest prowadzony
Po makro jest prowadzony pliku
EDIT
ALTERNATIVE Pobierz plik LOKALIZACJA
W przypadku, gdy powyższy link wikisend umiera, plik można pobrać z here
+ 1 dobre pytanie :) Mam kodu VBA będzie gotowy, że pomoc lub chcesz się kod C# konkretnie? Jeśli chcesz C#, będę musiał go poprawić i przetestować w C# zanim go opublikuję. –
Kod VBA działający samodzielnie jest ok, samodzielny, mam na myśli VBScript lub oddzielny plik Excela, w jaki sposób przekazujesz nazwy plików do wyszukiwania i zamiany? Jeśli udostępniasz swój VBA, na pewno zagłosuję, ponieważ odpowiedź nie musi być w 100% lub tylko C# i .NET :) –
Głosowanie nie jest problemem. :) Tak, będzie to osobny plik Excel, który pozwoli ci wybrać folder, a następnie kod zastąpi odpowiedni tekst we wszystkich modułach VBA we wszystkich plikach Excela w tym folderze. –