Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: Консолидация Добавлено: 26.05.06 14:44  

Автор вопроса:  SvetlanaL | ICQ: 229-356-346 
Я консолидирую несколько книг с несколькими листами. Прописываю пути и мена все жёстко. Хотелось бы универсальности. Помогите!!!
Так выглядит фрагмент рабочего макроса.
Worksheets("0503121").Range("d14").Consolidate Sources:=Array( _
        "'C:\SVOD\[filial1.xls]0503121'!R14C4:R32C6", "'C:\svod\[filial2.xls]0503121'!R14C4:R32C6", "'C:\svod\[filial3.xls]0503121'!R14C4:R32C6" _...
Как передать имена и пути через параметр?

Ответить

  Ответы Всего ответов: 9  

Номер ответа: 1
Автор ответа:
 Незнайка



Вопросов: 7
Ответов: 188
 Профиль | | #1 Добавлено: 26.05.06 15:55
Формируй свою строку:
"'C:\SVOD\[filial1.xls]0503121'!R14C4:R32C6", "'C:\svod\[filial2.xls]0503121'!R14C4:R32C6", "'C:\svod\[filial3.xls]0503121'!R14C4:R32C6" _...

Из текстовой переменной.

А вот как получить в переменную решать тебе (есть наверное не меньше 1001 способа). Например:
1. Перебирай все файлы в заданной папочке
2. Заполни нужными именами файлов и диапазонов обычный .txt файлик и бери оттуда.
3. На любом листике книги создай в столбце список файлов и перебирай его.

Вот собственно так...

Ответить

Номер ответа: 2
Автор ответа:
 SvetlanaL



ICQ: 229-356-346 

Вопросов: 8
Ответов: 20
 Профиль | | #2 Добавлено: 27.05.06 21:21
Это понятно. У меня проблема с синтаксисом.

Ответить

Номер ответа: 3
Автор ответа:
 Незнайка



Вопросов: 7
Ответов: 188
 Профиль | | #3 Добавлено: 28.05.06 11:03
Что именно ты незнаешь как сделать?

Ответить

Номер ответа: 4
Автор ответа:
 SvetlanaL



ICQ: 229-356-346 

Вопросов: 8
Ответов: 20
 Профиль | | #4 Добавлено: 28.05.06 14:42
Например, я получила в параметр путь и имена файлов C:\SVOD\filial1.xls,C:\SVOD\filial2.xls... ,
отдельно имена листов 0503121, 0503127...
В прежнем варианте:
"'C:\SVOD\[filial1.xls]0503121'!R14C4:R32C6", "'C:\svod\[filial2.xls]0503121'!R14C4:R32C6", "'C:\svod\[filial3.xls]0503121'!R14C4:R32C6" _...
Как записать то же самое, но через параметр?

Ответить

Номер ответа: 5
Автор ответа:
 Незнайка



Вопросов: 7
Ответов: 188
 Профиль | | #5 Добавлено: 28.05.06 16:49
Вот что нужно сделать:

Подключи библиотеки (Tools\References):
1. Microsoft ActiveX Data Objects 2.5 Library
2. Microsoft Scripting Runtime

   Первая нужна для определения имен листов в файле, не открывая при этом сам файл (чтобы работало быстрее).
   Вторая нужна для перебора файлов в заданном каталоге.

Дальше создай стандартный модуль и скопируй код:

Sub Consolidatia()

    Dim mFileSystemObject As FileSystemObject, mFolder As Folder, mFiles As Files, mFile As File
    Dim mConnection As ADODB.Connection, mRecordset As ADODB.Recordset, mConnectionString As String
    Dim mPath As String, StrokaKonsolidasia As String
    
    Set mFileSystemObject = New FileSystemObject
    Set mConnection = New ADODB.Connection
    
    mPath = "C:\SVOD" 'указанный в вопросе каталог с исходными файлами
    
    Set mFolder = mFileSystemObject.GetFolder(mPath)
    Set mFiles = mFolder.Files
    
    For Each mFile In mFiles
        mConnectionString = ";DRIVER={Microsoft Excel Driver (*.xls)};ReadOnly=1;DBQ=" & mFile.Path
        mConnection.Open mConnectionString
        Set mRecordset = mConnection.OpenSchema(adSchemaTables)
            Do Until mRecordset.EOF
                If mRecordset!TABLE_TYPE = "SYSTEM TABLE" Then
                    If Len(StrokaKonsolidasia) > 0 Then
                        StrokaKonsolidasia = StrokaKonsolidasia & "," & _
                            "'" & mFile.ParentFolder & "\[" & mFile.Name & "]" & _
                            Left$(mRecordset!TABLE_NAME, Len(mRecordset!TABLE_NAME) - 1) & _
                            "'!R14C4:R32C6" 'указанный в вопросе диапазон
                    Else
                        StrokaKonsolidasia = StrokaKonsolidasia & _
                            "'" & mFile.ParentFolder & "\[" & mFile.Name & "]" & _
                            Left$(mRecordset!TABLE_NAME, Len(mRecordset!TABLE_NAME) - 1) & _
                            "'!R14C4:R32C6" 'указанный в вопросе диапазон
                    End If
                End If
                mRecordset.MoveNext
            Loop
        mRecordset.Close
        mConnection.Close
    Next mFile
    
    Set mRecordset = Nothing
    Set mConnection = Nothing
    Set mFileSystemObject = Nothing
    
    'выводится на любой активный лист, любой активной книги, начиная с выделенной ячейки
    Selection.Consolidate Sources:=Split(StrokaKonsolidasia, ",";), Function:=xlSum

End Sub



Всё. Пользуйся.

Ответить

Номер ответа: 6
Автор ответа:
 SvetlanaL



ICQ: 229-356-346 

Вопросов: 8
Ответов: 20
 Профиль | | #6 Добавлено: 29.05.06 08:11
Спасибо за помощь.

Ответить

Номер ответа: 7
Автор ответа:
 Fever



Вопросов: 60
Ответов: 808
 Профиль | | #7 Добавлено: 31.05.06 16:44
Ну ни фига себе НЕЗНАЙКА!

Ответить

Номер ответа: 8
Автор ответа:
 LonerWanderer



Вопросов: 18
Ответов: 66
 Профиль | | #8 Добавлено: 22.11.06 10:02
Народ! у меня немного другая ситуация, но в принципе похожая. Но вот в чем проблема: данный код не работает, если в указанной папке находятся файлы, которые excel в принципе открыть не может и вот на первом же таком файле он спотыкается. Как сделать, чтобы код

For Each mFile In mFiles
....

выполнялся только для файлов XLS (а совсем хорошо, если для txt)?

Ответить

Номер ответа: 9
Автор ответа:
 LonerWanderer



Вопросов: 18
Ответов: 66
 Профиль | | #9 Добавлено: 22.11.06 10:28
Вопрос снимаю. Нашел в хелпе вот такой небольшой код. С небольшими переделками модно прикрутить и сюда.

Set fs = Application.FileSearch
With fs
    .LookIn = "C:\My Documents"
    .FileName = "cmd*"
    If .Execute(SortBy:=msoSortbyFileName, _
    SortOrder:=msoSortOrderAscending) > 0 Then
        MsgBox "There were " & .FoundFiles.Count & _
            " file(s) found."
        For i = 1 To .FoundFiles.Count
            MsgBox .FoundFiles(i)
        Next i
    Else
        MsgBox "There were no files found."
    End If
End With

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам