Добавить этот код в новую книгу с поддержкой макросов. Установите константы FIND_WHAT
и REPLACE_WITH
, откройте другие книги и запустите код.
Исходный код приходит от [сайт Чарльза Пирсона] [1]
ВНИМАНИЕ: Только основное тестирование было сделано!
Option Explicit
Sub ReplaceTextInCodeModules()
' Must add a reference to "Microsoft Visual Basic For Applications Extensibility 5.3"
' Also must set "Trust access to the VBA project object model"
' See the url below for more info on these.
' Based on code found at:
' Source: www.cpearson.com/excel/vbe.aspx Copyright 2013, Charles H. Pearson
Dim theWorkbook As Workbook
Dim VBProj As VBIDE.VBProject
Dim VBComp As VBIDE.VBComponent
Dim CodeMod As VBIDE.CodeModule
Dim numLines As Long ' end line
Dim lineNum As Long
Dim thisLine As String
Dim message As String
Dim numFound As Long
Const FIND_WHAT As String = "findthis"
Const REPLACE_WITH As String = "replaced"
numFound = 0
For Each theWorkbook In Application.Workbooks
If theWorkbook.Name <> ThisWorkbook.Name Then
If theWorkbook.HasVBProject Then
Set VBProj = theWorkbook.VBProject
For Each VBComp In VBProj.VBComponents
'Set VBComp = VBProj.VBComponents("Module1")
Set CodeMod = VBComp.CodeModule
With CodeMod
numLines = .CountOfLines
For lineNum = 1 To numLines
thisLine = .Lines(lineNum, 1)
If InStr(1, thisLine, FIND_WHAT, vbTextCompare) > 0 Then
message = message & theWorkbook.Name & " | " & VBComp.Name & " | Line #" & lineNum & vbNewLine
.ReplaceLine lineNum, Replace(thisLine, FIND_WHAT, REPLACE_WITH, , , vbTextCompare)
numFound = numFound + 1
End If
Next lineNum
End With
Next VBComp
End If
End If
Next theWorkbook
Debug.Print "Found: " & numFound
If message <> "" Then
Debug.Print message
End If
End Sub
Я не уверен, что вы имеете в виду, прокручивая пользовательские формы, если путь изменился на новый путь, почему бы вам не заменить строку для старого пути на путь со строкой из нового пути во всем проекте? – Jeanno
Объявите публичную константу в регулярном модуле и укажите, что из ваших форм. Если это не то, что вы ищете, то, возможно, добавьте еще несколько деталей к вашему вопросу - например, какова цель жестко закодированного пути и что там хранится. Можете ли вы заменить жестко закодированный путь (например) 'ThisWorkbook.Path &" \ subfolderHere \ "'? –
Jeanno, у меня есть дюжина пользовательских форм, которые ссылаются на разные рабочие листы в одной папке. Изменяя папки, мне нужно будет перейти к каждой пользовательской форме и вручную изменить путь к новому пути - вот что я имею в виду, прокручивая таблицы, поэтому мне не нужно вручную открывать и изменять каждый экземпляр пути. Я попробую предложение Тима и поставлю ссылку на путь в одном месте и «позвоню», когда мне это понадобится. –