Страницы: 1
RSS
Разбить связанные листы на отдельные документы.
 
Всем доброго времени суток! В приведенном ниже файле лист поискового запроса "поиск" и сканируемые массивы данных (седан, хэтчбэк) находятся в одном документе. Этот упрощенный (не стал выкладывать всю БД) документ решает задачу: пишем в "желтый квадрат" искомый автомобиль (если он есть в базе), программа выдает результат - объем двигателя.

Необходимо все листы разбить на отдельные документы (три документа), чтобы связь сохранялась, ессн)
При этом чтобы в колонке T оставался список с наименованием листов в разных документах, а в колонке U (выделен серо-зеленым) был путь к документам (по названию документа), содержащим эти листы.

Впрочем, если просто удастся разбить на отдельные документы, буду благодарен.
 
=ВПР(B4;ДВССЫЛ("'["&ИНДЕКС($T$4:$T$6;ПОИСКПОЗ(ИСТИНА;СЧЁТЕСЛИ(ДВССЫЛ("'["&$T$4:$T$7&".xlsx]"&$T$4:$T$7&"'!C2:C5");B4)>0;0))&".xlsx]"&
ИНДЕКС($T$4:$T$6;ПОИСКПОЗ(ИСТИНА;СЧЁТЕСЛИ(ДВССЫЛ("'["&$T$4:$T$7&".xlsx]"&$T$4:$T$7&"'!C2:C5");B4)>0;0))&"'!C:E");2;0)

Работает по открытым книгам с одноимёнными листами
[хэтчбэк.xlsx]!хэтчбэк
[седан.xlsx]!седан

Если есть необходимость работать с закрытыми книгами, придётся отказаться от ДВССЫЛ.
 
Уважаемый МатросНаЗебре, я под впечатлением, все работает, огромное человеческое Вам спасибо. Один вопрос, это я уже реализую самостоятельно... В какую сторону лучше копать при реализации подобных алгоритмов, если отказаться от ДВССЫЛ, чтобы работать с закрытыми книгами?
 
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address(0, 0) = "B4" Then
        GetWb Target
    End If
End Sub

Sub GetWb(rInput As Range)
    Dim car As String
    car = rInput.Value
    
    Dim a As Variant
    a = Range("T4:U6")
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    Dim y As Long
    Dim sFull As String
    Dim sName As String
    Dim wb As Workbook
    Dim r As Range
    Dim bClose As Boolean
    
    Application.ScreenUpdating = False
    
    On Error Resume Next
        For y = 1 To UBound(a, 1)
            sFull = a(y, 2)
            sName = fso.getfilename(sFull)
            Set wb = Nothing
            Set wb = Workbooks(sName)
            bClose = False
            If wb Is Nothing Then
                Set wb = Workbooks.Open(sFull, False, True)
                bClose = True
            End If
            If Not wb Is Nothing Then
                Set r = wb.Sheets(1).Columns("C:D")
                If WorksheetFunction.CountIfs(r.Columns(1), car) Then
                    rInput.Cells(1, 2).Value = WorksheetFunction.VLookup(car, r, 2, 0)
                    If bClose Then wb.Close False
                    Exit For
                Else
                    If bClose Then wb.Close False
                End If
            End If
            Set wb = Nothing
        Next
    On Error GoTo 0
    
    Application.ScreenUpdating = True
    
End Sub
С закрытыми книгами можно воспользоваться макросом.
Нужно вставить код в модуль листа "поиск".
В U3:U6 заполнить полные имена файлов, путь плюс имя.
 
Я даже не знаю как Вас благодарить. Большое человеческое спасибо, Вы очень помогли. Система работает отменно.
Страницы: 1
Наверх