Перебор нескольких файлов Excel, поиск строки и возврат значений в соседних ячейках

#excel #vba

#excel #vba

Вопрос:

У меня есть 400 файлов Excel (технические отчеты), каждый из которых содержит 5 вкладок с разными именами. Мне нужно создать основную электронную таблицу с определенной информацией о каждом из этих отчетов (информация всегда на одной вкладке)

У меня есть код (скопированный отсюда), который можно использовать для поиска информации в определенной ячейке.

Проблема в том, что структура отчетов не согласована, хорошей новостью является то, что в соседней ячейке с информацией, которую я ищу, всегда есть один и тот же текст «Уровень воды:».

Мне нужен макрос, который может выполнять поиск по этой текстовой строке, копировать соседнюю ячейку и возвращать ее в эту основную таблицу.

Пожалуйста, посмотрите код, который я упомянул:

   Sub Test()
' Adjust the path below as required
MyPath = "C:Usersbcf00637DesktoppilelogsV2"    ' Set the path.
myname = Dir(MyPath, vbNormal)    ' Retrieve the first entry.
Do While myname <> ""    ' Start the loop.
    ' Ignore the current directory and the encompassing directory.
    If myname <> "." And myname <> ".." Then
        If (GetAttr(MyPath amp; myname) And vbNormal) = vbNormal Then
           ActiveCell.FormulaR1C1 = "='" amp; MyPath amp; "[" amp; myname amp; "]Approval Form'!R1C1" ' change the part after the ] to your sheets name
           ' also change the R1C1 on the end to pick up the cell you want ie R2C3 for cell C2
           ' do NOT change the 1st one (.FormulaR1C1) this is part of the command.
           ActiveCell.Offset(0, 1).Value = myname
           ActiveCell.Offset(1, 0).Select
        End If
    End If
    myname = Dir
Loop

End Sub
  

Ответ №1:

Попробуйте это. Несколько запросов в комментариях, поскольку детали вашего вопроса неясны.

 Sub Test()

Dim r As Range, wb As Workbook

mypath = "C:Usersbcf00637DesktoppilelogsV2"
myname = Dir(mypath, vbNormal)

Do While myname <> ""
    If myname <> "." And myname <> ".." Then
        Set wb = Workbooks.Open(Filename:=mypath amp; myname)
        If (GetAttr(mypath amp; myname) And vbNormal) = vbNormal Then
            'have left this line as not sure what it does
            ActiveCell.FormulaR1C1 = "='" amp; mypath amp; "[" amp; myname amp; "]Approval Form'!R1C1"
            'change sheet name to suit
            Set r = wb.Sheets("Sheet1").usedrange.Find(what:="Water level:", lookat:=xlWhole,matchcase:=false)
            If Not r Is Nothing Then
                'puts cell to the right in column A of master sheet
                ThisWorkbook.Sheets(1).Range("A" amp; Rows.Count).End.xlUp(2).Value = r.Offset(1).Value
            End If
        End If
        wb.Close False
    End If
    myname = Dir
Loop

End Sub
  

Комментарии:

1. Вау, это было быстро, спасибо за ответ, на самом деле это не работает, но спасибо!

2. Ха, ты хочешь рассказать мне, как это не работает, чтобы я мог заставить это работать?

3. Ну, я скопировал код, удалил строку «activecell.FormulaR1C1 …», изменил путь и лист; запустил макрос и.. ничего не произошло.

4. Вам нужно проверить мои комментарии и пошагово выполнить код, чтобы увидеть, что происходит. Возможно, текст не найден или, возможно, он копирует не ту ячейку.

5. SJR, код теперь показывает ошибку в этой строке : Set r = wb.Sheets(«Запись в оболочке»). Найти (что:=»Уровень воды:», lookat:=xlWhole, MatchCase:=False) «объект не допускает метод»?? Возможно, я немного не в себе…