Страницы: 1
RSS
Как циклом пройтись по файлам в папке в зависимости от их размера?
 
так вообще возможно делать?
Проблема в том, что когда циклом проходим-обрабатываем файлы, макрос с маленького начинает и в него большой загружает,- получается долго ждать приходиться, а если будет наоборот, то экономим время.
Может как-то обработать предварительно файлы, чтобы сортирнулись по размеру сами?? или что?
Изменено: Домкрат - 18.05.2020 21:12:41
 
Думаю проверять размер уже открытого  файла с новым, если новый больше, то старый закрываю, и оставляю активным больший файл. всем спасибо за помощь.
Код
Sub asdasd()
 '3. Создание объекта для работы с папками и файлами.
    Set myFSO = CreateObject(Class:="Scripting.FileSystemObject")
    
    '4. Создание ссылки на папку, в которой находятся инвойсы.
        ' Путь определяется по активному файлу.
    Set myFolder = myFSO.GetFolder(ActiveWorkbook.Path)
    Stop
iFullName = myFolder & "\" & ActiveWorkbook.Name

iFileSize = FileLen(iFullName)

MsgBox "Размер файла составляет : " & iFileSize & " байт", , ""
End Sub
Изменено: Домкрат - 18.05.2020 22:16:31
 
У DIR (в батнике) есть ключ
S: Sorts by file size, smallest to largest.
You can also add “-” (minus) before any of the above options to reverse the order.
Можно сгенерить список, перебирать по нему.
Ну или можно используя FSO собрать в двумерный массив имена файлов с размером, отсортировать и затем циклом перебирать.
Изменено: Hugo - 18.05.2020 23:00:35
 
Почитайте в "Приемах" эту статью. - должна помочь.
 
Юрий М, да, есть там идеи, завтра попробую, спасибо.
 
Цитата
Домкрат написал:
так вообще возможно делать?
да, домкрат,- ты красавчик)
Теперь макрос проверяет размер книги, и в зависимости от этого производит нужные действия.
Код
 'Windows(ИМЯ_новой_КНИГИ).Activate
          ' узнаём её размер:
        
          'Создание объекта для работы с папками и файлами.
      Set myFSO = CreateObject(Class:="Scripting.FileSystemObject")
      'Создание ссылки на папку, в которой находятся инвойсы.
          ' Путь определяется по активному файлу.
      Set myFolder = myFSO.GetFolder(ActiveWorkbook.Path)
        iFullName = myFolder & "\" & ActiveWorkbook.name
          iFileSizeNew = FileLen(iFullName) ' это размер новой книги
          ' сравниваем размеры двух книг и оставляем аткивной ту, которая меньше.
      
          If iFileSize <= iFileSizeNew Then
       ' КНИГА МЕНЬШЕГО РАЗМЕРА ДОЛЖНА БЫТЬ АКТИВИРОВАНА!
     'именно здесь ставим метку, потому-что дальше будет активироваа целевая книга
    ' ставим метку, что инвойс был обработан:
      
           Range("B5") = 1
           Windows(ИМЯКНИГИ).Activate 'КНИГА МЕНЬШЕГО РАЗМЕРА ДОЛЖНА БЫТЬ АКТИВИРОВАНА!!
         
             
            
                 MsgBox "эта книга меньше,"
                 
           '1) объединяем:
              Объеденить
                Windows(ИМЯКНИГИ).Close True
                 
               Else
            Windows(ИМЯ_новой_КНИГИ).Activate ' 'КНИГА МЕНЬШЕГО РАЗМЕРА ДОЛЖНА БЫТЬ АКТИВИРОВАНА!!
           
           Range("B5") = 1
         
          MsgBox "эта книга больше"
          '1) объединяем:
             Объеденить
             Windows(ИМЯ_новой_КНИГИ).Close True
      End If
          
          ' действя с инвойсами:
Страницы: 1
Наверх