Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.06.2010, 22:34   #1
Jaroslav
Форумчанин
 
Регистрация: 08.06.2009
Сообщений: 179
По умолчанию Последовательность открытия файлов

Например, у меня есть в пакпе D:\111 файлы БМЕС1 (D2504).xls, БМЕС2 (D2503).xls, БМЕС3 (D2501).xls, БМЕС4 (D2502).xls.

Код:
Dim fs As New FileSystemObject
Dim fl As Folder
Dim fls As Files
Set fl = fs.GetFolder("D:\111")
    Set fls = fl.Files
    For Each f In fls
        Workbooks.Open Filename:=f
    Next
Этот вариант кода откроет сначала файл БМЕС1 (D2504).xls, потом файл БМЕС2 (D2503).xls, потом файл БМЕС3 (D2501).xls, потом файл БМЕС4 (D2502).xls, то есть открытие производится по имени файла.
А мне нужно чтобы сначала открывался БМЕС3 (D2501).xls, потом БМЕС4 (D2502).xls, потом БМЕС2 (D2503).xls, потом БМЕС1 (D2504).xls, то есть чтобы открытие выполнялось по коду в скобках.
Jaroslav вне форума Ответить с цитированием
Старый 03.06.2010, 05:15   #2
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Сохраните полученные имена файлов из нужной папки, например, в массиве. Затем, отсортируйте массив по требуемым критериям. Затем, открывайте файлы из массива по порядку. Например, так:
Код:
Sub Main()
    Dim i As Long, j As Long, a(), b(), fls, f, x
    Set fls = CreateObject("Scripting.FileSystemObject").GetFolder("D:\111").Files
    ReDim a(1 To fls.Count, 1 To 2): i = 1
    For Each f In fls
        a(i, 1) = f.Name: a(i, 2) = Split(f.Name, "(")(1): i = i + 1
    Next
    For i = LBound(a, 1) To UBound(a, 1) - 1
        For j = i + 1 To UBound(a, 1)
            If a(i, 2) > a(j, 2) Then
                x = a(i, 1): a(i, 1) = a(j, 1): a(j, 1) = x
                x = a(i, 2): a(i, 2) = a(j, 2): a(j, 2) = x
    End If: Next: Next
    b = Application.Index(a, 0, 1)
    For i = LBound(b) To UBound(b)
        Workbooks.Open Filename:=b(i)
    Next
End Sub
Если требуется, добавьте проверки: существует ли путь, какой формат файла, есть ли в имени файла скобки и т.п. В предложенном макросе это не делается.
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 03.06.2010 в 05:54. Причина: Добавлено
SAS888 вне форума Ответить с цитированием
Старый 03.06.2010, 09:16   #3
Jaroslav
Форумчанин
 
Регистрация: 08.06.2009
Сообщений: 179
По умолчанию

Спасибо, SAS888. Я попробую.
Jaroslav вне форума Ответить с цитированием
Старый 03.06.2010, 11:10   #4
Jaroslav
Форумчанин
 
Регистрация: 08.06.2009
Сообщений: 179
По умолчанию

Ответ на мой вопрос:

Код:
Dim fs As New FileSystemObject
Dim fl As Folder
Dim fls As Files
Dim f As File
Dim str1 As String
Dim i As Integer, c As Integer

Application.ScreenUpdating = False
Application.DisplayAlerts = False
str1 = "D:\111"
Set fl = fs.GetFolder(str1)
Set fls = fl.Files
    i = 0
    Workbooks.Add
    For Each f In fls
        i = i + 1
        Cells(i, 1).Value = Trim(f)
    Next
    c = Columns("A").Rows(65536).End(xlUp).Row
    For i = 1 To c
        Cells(i, 2).FormulaR1C1 = _
            "=MID(RC[-1],FIND(""("",RC[-1],1)+1,FIND("")"",RC[-1],1)-FIND(""("",RC[-1],1)-1)"
        Range("B1").AutoFill Destination:=Range("B1:B" & c), Type:=xlFillDefault
    Next
    Range("A1:B" & c).Sort Key1:=Range("B1")
    ReDim arr(1 To c): For i = 1 To c: arr(i) = Cells(i, 1): Next
    ActiveWindow.Close
    For i = 1 To c
        Workbooks.Open Filename:=arr(i)
    Next
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Jaroslav вне форума Ответить с цитированием
Старый 03.06.2010, 11:27   #5
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Можно и так. Но я не хотел использовать ячейки рабочего листа. Тем более, что я не знаю, какие можно "трогать", а какие нет. Ну, Вам виднее.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Диалог открытия\сохранения файлов с другова компьютера. Proger10 Работа с сетью в Delphi 1 02.05.2009 11:22
Текстовый редактор для открытия всех файлов в выделенных папках, подпапках. Alar Софт 5 20.01.2009 16:25
Процедуры открытия и сохранения файлов на Delphi Kreaman Помощь студентам 1 09.11.2008 04:48
Открытия графических файлов Kocapb Общие вопросы C/C++ 3 01.12.2007 19:11