так вообще возможно делать? Проблема в том, что когда циклом проходим-обрабатываем файлы, макрос с маленького начинает и в него большой загружает,- получается долго ждать приходиться, а если будет наоборот, то экономим время. Может как-то обработать предварительно файлы, чтобы сортирнулись по размеру сами?? или что?
Думаю проверять размер уже открытого файла с новым, если новый больше, то старый закрываю, и оставляю активным больший файл. всем спасибо за помощь.
Код
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
У 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 собрать в двумерный массив имена файлов с размером, отсортировать и затем циклом перебирать.
да, домкрат,- ты красавчик) Теперь макрос проверяет размер книги, и в зависимости от этого производит нужные действия.
Код
'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
' действя с инвойсами: