И опять здравствуйте. Суть вопроса в шапке... Создавая список файлов надо получать значение из файла, не открывая его... Возможно ли такое? Вот макрос которым идет перебор папки
'Получаем первый файл соответствующий шаблону strFileName = Dir(strDirPath & strMaskSearch)
Do While strFileName <> "" 'До тех пор пока файлы "не закончатся"
.... ...... Мои какие то действия
ActiveWorkbook.Sheets("Список").Range("D" & sh) = "Сюда надо значение из файла обозначенного как именованный диапазон "Итог" "
sh=sh+1
strFileName = Dir 'Следующий файл Loop
[/vba]
И опять здравствуйте. Суть вопроса в шапке... Создавая список файлов надо получать значение из файла, не открывая его... Возможно ли такое? Вот макрос которым идет перебор папки
Создавая список файлов надо получать значение из файла, не открывая его
Звучит примерно так как прочитать реальную книгу, не открывая. Выб пояснили, чего хотите избежать? Просто изменений на экаране или .... С точки зрения системы, файл то все равно будет открываться. Приложеие должно его обработать. Текущее или новое, все равно в фоне или интерактивно откроет файл. [vba]
Код
Sub test() Set objExcel = CreateObject("Excel.Application") objExcel.Visible = False Set objWorkbook = objExcel.Workbooks.Open _ ("C:\temp\book1.xlsx") Debug.Print objExcel.Range("TESTRANGE").Value objExcel.Quit End Sub
[/vba] При этом инициализация приложения - самый длительный процесс.
Создавая список файлов надо получать значение из файла, не открывая его
Звучит примерно так как прочитать реальную книгу, не открывая. Выб пояснили, чего хотите избежать? Просто изменений на экаране или .... С точки зрения системы, файл то все равно будет открываться. Приложеие должно его обработать. Текущее или новое, все равно в фоне или интерактивно откроет файл. [vba]
Код
Sub test() Set objExcel = CreateObject("Excel.Application") objExcel.Visible = False Set objWorkbook = objExcel.Workbooks.Open _ ("C:\temp\book1.xlsx") Debug.Print objExcel.Range("TESTRANGE").Value objExcel.Quit End Sub
[/vba] При этом инициализация приложения - самый длительный процесс.bmv98rus
Замечательный Временно просто медведь , процентов на 20.
Сообщение отредактировал bmv98rus - Суббота, 28.01.2017, 09:34
bmv98rus, Открывать 1500 файлов по очереди? Кол-во будет увеличиваться... При том что они будут лежать на файловом сервере к которому привязаны 3-5 сотен юзеров? Думаю такая обработка займет времени прилично... Потому и спрашиваю есть ли возможность не открывать и не закрывать файлы? Предложенную вами обработку я знаю. Но меня интересует быстродействие.
bmv98rus, Открывать 1500 файлов по очереди? Кол-во будет увеличиваться... При том что они будут лежать на файловом сервере к которому привязаны 3-5 сотен юзеров? Думаю такая обработка займет времени прилично... Потому и спрашиваю есть ли возможность не открывать и не закрывать файлы? Предложенную вами обработку я знаю. Но меня интересует быстродействие.Timber_Wolf
Timber_Wolf, Пример некоторое время назал 7000 файлов, установка пароля на лист. - несколько чаов работы не самого мощьного ноутбука. Если разово - то можно потерпеть. Если периодическа процедура чтения, то конечно может стать критичным. однако
При том что они будут лежать на файловом сервере к которому привязаны 3-5 сотен юзеров?
а это сведет всю оптимизацию к нулю, так как , как таковое открытие файла происходит.
Timber_Wolf, Пример некоторое время назал 7000 файлов, установка пароля на лист. - несколько чаов работы не самого мощьного ноутбука. Если разово - то можно потерпеть. Если периодическа процедура чтения, то конечно может стать критичным. однако
думаю оптимально будет делать просто с помощью "=", затем заменить на значение, ну или использовать ExecuteExcel4Macro как выше уже говорилось. Но нужно знать путь к файлу и имя нужного листа, и естественно ячейку.
думаю оптимально будет делать просто с помощью "=", затем заменить на значение, ну или использовать ExecuteExcel4Macro как выше уже говорилось. Но нужно знать путь к файлу и имя нужного листа, и естественно ячейку.Hugo
_Boroda_, Я пробовал данный метод. Он отлично отрабатывал если идет обращение к ячейке, аля Range("A1"), но та ячейка которая мне нужна плавает по листу в зависимости от кол-ва строк расчета. И я решил сделать ее именованным диапазоном, и данный метод не может к нему обратиться Range("Итог"). Может я не так делаю, не тот синтаксис? Просто раньше в практике не было таких задач у меня... Есть мысли или может другие методы обращения именно к именованному диапазону, который по факту имеет сдвиг по листу?
_Boroda_, Я пробовал данный метод. Он отлично отрабатывал если идет обращение к ячейке, аля Range("A1"), но та ячейка которая мне нужна плавает по листу в зависимости от кол-ва строк расчета. И я решил сделать ее именованным диапазоном, и данный метод не может к нему обратиться Range("Итог"). Может я не так делаю, не тот синтаксис? Просто раньше в практике не было таких задач у меня... Есть мысли или может другие методы обращения именно к именованному диапазону, который по факту имеет сдвиг по листу?Timber_Wolf
bmv98rus, Повключал все библиотеки с названием начинающимся на Microsoft ActiveX Data Object заработал пример от Сана. Не тестировал правда пока на массовой обработке. Да и включение библиотек может не подойти... Т.к. начальник должен нажать кнопку и получить статистику, без лазания в настройки и тыканья мышкой нужные библиотеки...
Текущий вопрос остается актуальным... Надо без лишних действий по включению библиотек (представьте что вы бабушке дали этот файл, ей до фени библиотеки, не работает и все тут) =)))
bmv98rus, Повключал все библиотеки с названием начинающимся на Microsoft ActiveX Data Object заработал пример от Сана. Не тестировал правда пока на массовой обработке. Да и включение библиотек может не подойти... Т.к. начальник должен нажать кнопку и получить статистику, без лазания в настройки и тыканья мышкой нужные библиотеки...
Текущий вопрос остается актуальным... Надо без лишних действий по включению библиотек (представьте что вы бабушке дали этот файл, ей до фени библиотеки, не работает и все тут) =)))Timber_Wolf
Сообщение отредактировал Timber_Wolf - Понедельник, 30.01.2017, 12:08
Повключал все библиотеки с названием начинающимся на Microsoft ActiveX Data Object
Странно, обычно файл несет с собой эти связи и скорее бывает проблема, когда библиотек нет или версии очень разные, тогда все скрипты не работают. Вы попробуйте на боевой версии скорее всего получится все как надо
ну исходя из ранее написанного явно надо предусмотреть индикацию работы. За пару секунд полторы тысячи файлов по сети не обработать. Собственно я с самого начала на это внимание и пытался акцентировать, что может оказаться не будет огромного прироста в скорости из-за разных методов, особенно при таких количествах файлов.
P.S. Раз уж тему отдельную создали, то можно убрать лишнее из 13го поста.
Повключал все библиотеки с названием начинающимся на Microsoft ActiveX Data Object
Странно, обычно файл несет с собой эти связи и скорее бывает проблема, когда библиотек нет или версии очень разные, тогда все скрипты не работают. Вы попробуйте на боевой версии скорее всего получится все как надо
ну исходя из ранее написанного явно надо предусмотреть индикацию работы. За пару секунд полторы тысячи файлов по сети не обработать. Собственно я с самого начала на это внимание и пытался акцентировать, что может оказаться не будет огромного прироста в скорости из-за разных методов, особенно при таких количествах файлов.
P.S. Раз уж тему отдельную создали, то можно убрать лишнее из 13го поста.bmv98rus
Замечательный Временно просто медведь , процентов на 20.
_Boroda_, Идея с формулами хорошая и работает быстро... Но умирает код, на длинных названиях файлов похоже... Обработал 112 файлов и ошибка. Опытным путем выяснил что умирает именно в макросе при длительности названия файла 148 символов... Если с тем же файлом повторить операцию в ручную прописав формулу, берет значение... Есть костыль какой нибудь?
PS: длинна всей формулы получается 189 символов. Тут ограничения какие нибудь не срабатывают?
_Boroda_, Идея с формулами хорошая и работает быстро... Но умирает код, на длинных названиях файлов похоже... Обработал 112 файлов и ошибка. Опытным путем выяснил что умирает именно в макросе при длительности названия файла 148 символов... Если с тем же файлом повторить операцию в ручную прописав формулу, берет значение... Есть костыль какой нибудь?
PS: длинна всей формулы получается 189 символов. Тут ограничения какие нибудь не срабатывают?Timber_Wolf
Сообщение отредактировал Timber_Wolf - Понедельник, 30.01.2017, 14:18
Вариант сходу, не идеальный, зато сразу В цикле когда идете, то проверяйте длину текстовой строки обращения (путь + название + расширение + лист + ячейка). Если меньше 148 символов, то как обычно, если больше, то выгружаете на лист формулой типа [vba]
[/vba] и считываете значение уже не из кода, а прямо из ячейки
Вариант сходу, не идеальный, зато сразу В цикле когда идете, то проверяйте длину текстовой строки обращения (путь + название + расширение + лист + ячейка). Если меньше 148 символов, то как обычно, если больше, то выгружаете на лист формулой типа [vba]
_Boroda_, Вы конечно простите что вас замучал... +)) Но оказывается я просто не внимательный криворук =))) Я не правильно формировал строку формулы =)) На вашем последнем примере я нашел свои ошибки =))) При этом танцы с бубном не понадобились и отработал стандартный вариант формулы =)))
_Boroda_, Вы конечно простите что вас замучал... +)) Но оказывается я просто не внимательный криворук =))) Я не правильно формировал строку формулы =)) На вашем последнем примере я нашел свои ошибки =))) При этом танцы с бубном не понадобились и отработал стандартный вариант формулы =)))Timber_Wolf
Сообщение отредактировал Timber_Wolf - Вторник, 31.01.2017, 11:12