Проблемы с поиском и заменой всего нескольких файлов в одном каталоге - Excel VBA - PullRequest
0 голосов
/ 10 января 2019

код выполняется, но не находит / не заменяет значения.

Я считаю, что проблемы в цикле for с таблицами и методом замены

    Sub UGA()
    'PURPOSE: Loop through all Excel files in a user specified folder and perform a set task on them

    Dim wb As Workbook
    Dim ws As Worksheet
    Dim myPath, myFile, myExtension As String
    Dim fnd, rep As Variant
    Dim FldrPicker As FileDialog

    'Loop through each Excel file in folder
      Do While myFile <> ""
        'Set variable equal to opened workbook
          Set wb = Workbooks.Open(Filename:=myPath & myFile)

        'Ensure Workbook has opened before moving on to next line of code
          DoEvents

        'find and replace with blank
          fnd = "find this"
          rep = ""

        'Loop through each worksheet in ActiveWorkbook
          For Each ws In ActiveWorkbook.Worksheets
                  ws.Cells.Replace What:=fnd, Replacement:=rep, _
                  LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, _
                  SearchFormat:=False, ReplaceFormat:=False
          Next ws

        'Save and Close Workbook
          wb.Close SaveChanges:=True

        'Ensure Workbook has closed before moving on to next line of code
          DoEvents

        'Get next file name
          myFile = Dir
      Loop

    'Message Box when tasks are completed
      MsgBox "Complete!"

    End Sub

ожидается найти определенное значение и заменить его пробелами ("")

Ответы [ 2 ]

0 голосов
/ 10 января 2019

через рабочие тетради и рабочие листы

Sub UGA()
 'PURPOSE: Loop through all Excel files in a user specified folder and perform a set task on them

    Const fnd As String = "find this"
    Const rep As String = ""
    Const cStrExtensions As String = "*.xls*"

    Dim ws As Worksheet
    Dim strFolderPath As String     ' Search Folder
    Dim strFileName As String       ' Current File Name (Workbook)

    With Application
        .ScreenUpdating = False
        .DisplayAlerts = False
    End With

    On Error GoTo ProcedureExit

    ' Choose Search Folder
    With Application.FileDialog(msoFileDialogFolderPicker)
        If .Show = False Then Exit Sub
        strFolderPath = .SelectedItems(1) & "\"
    End With

    ' Loop through folder to determine Current File Name (Workbook).
    strFileName = Dir(strFolderPath & cStrExtensions)

    ' Loop through files in folder.
    Do While strFileName <> ""

        ' Open each file in folder
        Workbooks.Open strFolderPath & strFileName

        With ActiveWorkbook

            ' Loop through each worksheet in ActiveWorkbook
            For Each ws In .Worksheets
                ws.Cells.Replace What:=fnd, Replacement:=rep, _
                    LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, _
                    SearchFormat:=False, ReplaceFormat:=False
            Next
            .Close True
        End With

        strFileName = Dir()

        ' Exclude this workbook.
        'If ThisWorkbook.Name = strFileName Then strFileName = Dir()

    Loop

    'Message Box when tasks are completed
    MsgBox "Complete!"

ProcedureExit:

  With Application
    .ScreenUpdating = True
    .DisplayAlerts = True
  End With

End Sub
0 голосов
/ 10 января 2019

Ваш код полагается на Active Workbook, который является вероятным виновником.

Измените For Each ws In ActiveWorkbook.Worksheets на For Each ws in wb.Worksheets, чтобы явно обратиться к книге.

Вы также затеняли свои строки fnd & rep как варианты. Это должны быть строки, и правильный способ краткого объявления двух переменных - Dim fnd as String, rep as String. То, как вы пошли, фактически объявляет обе переменные как вариант

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...