Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Обращение к именованному диапазону не открывая файл - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Обращение к именованному диапазону не открывая файл
Timber_Wolf Дата: Пятница, 27.01.2017, 13:46 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 107
Репутация: 2 ±
Замечаний: 0% ±

Excel 2010
И опять здравствуйте.
Суть вопроса в шапке... Создавая список файлов надо получать значение из файла, не открывая его...
Возможно ли такое?
Вот макрос которым идет перебор папки

[vba]
Код
sh=3

strDirPath = "C:\Тест\" 'Папка поиска
strMaskSearch = "*.xls*" 'Маска поиска

'Получаем первый файл соответствующий шаблону
strFileName = Dir(strDirPath & strMaskSearch)

Do While strFileName <> "" 'До тех пор пока файлы "не закончатся"
    
    ....
    ...... Мои какие то действия
        
    ActiveWorkbook.Sheets("Список").Range("D" & sh) = "Сюда надо значение из файла обозначенного как именованный диапазон "Итог" "
    
sh=sh+1
    
    strFileName = Dir 'Следующий файл
Loop
[/vba]
 
Ответить
СообщениеИ опять здравствуйте.
Суть вопроса в шапке... Создавая список файлов надо получать значение из файла, не открывая его...
Возможно ли такое?
Вот макрос которым идет перебор папки

[vba]
Код
sh=3

strDirPath = "C:\Тест\" 'Папка поиска
strMaskSearch = "*.xls*" 'Маска поиска

'Получаем первый файл соответствующий шаблону
strFileName = Dir(strDirPath & strMaskSearch)

Do While strFileName <> "" 'До тех пор пока файлы "не закончатся"
    
    ....
    ...... Мои какие то действия
        
    ActiveWorkbook.Sheets("Список").Range("D" & sh) = "Сюда надо значение из файла обозначенного как именованный диапазон "Итог" "
    
sh=sh+1
    
    strFileName = Dir 'Следующий файл
Loop
[/vba]

Автор - Timber_Wolf
Дата добавления - 27.01.2017 в 13:46
bmv98rus Дата: Пятница, 27.01.2017, 14:48 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4147
Репутация: 772 ±
Замечаний: 0% ±

Excel 2013/2016
Создавая список файлов надо получать значение из файла, не открывая его
Звучит примерно так как прочитать реальную книгу, не открывая. Выб пояснили, чего хотите избежать? Просто изменений на экаране или .... С точки зрения системы, файл то все равно будет открываться. Приложеие должно его обработать. Текущее или новое, все равно в фоне или интерактивно откроет файл.
[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]
При этом инициализация приложения - самый длительный процесс.


Замечательный Временно просто медведь , процентов на 20.

Сообщение отредактировал bmv98rus - Суббота, 28.01.2017, 09:34
 
Ответить
Сообщение
Создавая список файлов надо получать значение из файла, не открывая его
Звучит примерно так как прочитать реальную книгу, не открывая. Выб пояснили, чего хотите избежать? Просто изменений на экаране или .... С точки зрения системы, файл то все равно будет открываться. Приложеие должно его обработать. Текущее или новое, все равно в фоне или интерактивно откроет файл.
[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
Дата добавления - 27.01.2017 в 14:48
Timber_Wolf Дата: Пятница, 27.01.2017, 16:19 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 107
Репутация: 2 ±
Замечаний: 0% ±

Excel 2010
bmv98rus, Открывать 1500 файлов по очереди? Кол-во будет увеличиваться... При том что они будут лежать на файловом сервере к которому привязаны 3-5 сотен юзеров?
Думаю такая обработка займет времени прилично... Потому и спрашиваю есть ли возможность не открывать и не закрывать файлы?
Предложенную вами обработку я знаю. Но меня интересует быстродействие.
 
Ответить
Сообщениеbmv98rus, Открывать 1500 файлов по очереди? Кол-во будет увеличиваться... При том что они будут лежать на файловом сервере к которому привязаны 3-5 сотен юзеров?
Думаю такая обработка займет времени прилично... Потому и спрашиваю есть ли возможность не открывать и не закрывать файлы?
Предложенную вами обработку я знаю. Но меня интересует быстродействие.

Автор - Timber_Wolf
Дата добавления - 27.01.2017 в 16:19
_Boroda_ Дата: Пятница, 27.01.2017, 16:23 | Сообщение № 4
Группа: Админы
Ранг: Местный житель
Сообщений: 16886
Репутация: 6611 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Посмотрите вот здесь, пойдет?
https://msdn.microsoft.com/en-us/library/office/ff193019.aspx
Типа вот этого
S[vba]
Код
et firstCellInSheet = Workbooks ( "Book1.xls"). Листы (4) .Evaluate ( "A1")
[/vba]

Еще вот это погуглите
ExecuteExcel4Macro

Вот к нему пример от EducatedFool
http://excelvba.ru/code/GetValue


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995


Сообщение отредактировал _Boroda_ - Пятница, 27.01.2017, 16:31
 
Ответить
СообщениеПосмотрите вот здесь, пойдет?
https://msdn.microsoft.com/en-us/library/office/ff193019.aspx
Типа вот этого
S[vba]
Код
et firstCellInSheet = Workbooks ( "Book1.xls"). Листы (4) .Evaluate ( "A1")
[/vba]

Еще вот это погуглите
ExecuteExcel4Macro

Вот к нему пример от EducatedFool
http://excelvba.ru/code/GetValue

Автор - _Boroda_
Дата добавления - 27.01.2017 в 16:23
bmv98rus Дата: Пятница, 27.01.2017, 17:13 | Сообщение № 5
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4147
Репутация: 772 ±
Замечаний: 0% ±

Excel 2013/2016
Timber_Wolf,
Пример некоторое время назал 7000 файлов, установка пароля на лист. - несколько чаов работы не самого мощьного ноутбука. Если разово - то можно потерпеть. Если периодическа процедура чтения, то конечно может стать критичным. однако
При том что они будут лежать на файловом сервере к которому привязаны 3-5 сотен юзеров?
а это сведет всю оптимизацию к нулю, так как , как таковое открытие файла происходит.


Замечательный Временно просто медведь , процентов на 20.
 
Ответить
СообщениеTimber_Wolf,
Пример некоторое время назал 7000 файлов, установка пароля на лист. - несколько чаов работы не самого мощьного ноутбука. Если разово - то можно потерпеть. Если периодическа процедура чтения, то конечно может стать критичным. однако
При том что они будут лежать на файловом сервере к которому привязаны 3-5 сотен юзеров?
а это сведет всю оптимизацию к нулю, так как , как таковое открытие файла происходит.

Автор - bmv98rus
Дата добавления - 27.01.2017 в 17:13
Саня Дата: Пятница, 27.01.2017, 17:34 | Сообщение № 6
Группа: Друзья
Ранг: Ветеран
Сообщений: 1068
Репутация: 560 ±
Замечаний: 0% ±

XL 2016
когда-то использовал
К сообщению приложен файл: _____ADO.rar (23.5 Kb)
 
Ответить
Сообщениекогда-то использовал

Автор - Саня
Дата добавления - 27.01.2017 в 17:34
Hugo Дата: Пятница, 27.01.2017, 19:43 | Сообщение № 7
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3854
Репутация: 814 ±
Замечаний: 0% ±

365
получать значение из файла, не открывая его
думаю оптимально будет делать просто с помощью "=", затем заменить на значение, ну или использовать ExecuteExcel4Macro как выше уже говорилось.
Но нужно знать путь к файлу и имя нужного листа, и естественно ячейку.


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
Сообщение
получать значение из файла, не открывая его
думаю оптимально будет делать просто с помощью "=", затем заменить на значение, ну или использовать ExecuteExcel4Macro как выше уже говорилось.
Но нужно знать путь к файлу и имя нужного листа, и естественно ячейку.

Автор - Hugo
Дата добавления - 27.01.2017 в 19:43
Timber_Wolf Дата: Понедельник, 30.01.2017, 08:48 | Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 107
Репутация: 2 ±
Замечаний: 0% ±

Excel 2010
_Boroda_, Я пробовал данный метод. Он отлично отрабатывал если идет обращение к ячейке, аля Range("A1"), но та ячейка которая мне нужна плавает по листу в зависимости от кол-ва строк расчета. И я решил сделать ее именованным диапазоном, и данный метод не может к нему обратиться Range("Итог"). Может я не так делаю, не тот синтаксис? Просто раньше в практике не было таких задач у меня...
Есть мысли или может другие методы обращения именно к именованному диапазону, который по факту имеет сдвиг по листу?
 
Ответить
Сообщение_Boroda_, Я пробовал данный метод. Он отлично отрабатывал если идет обращение к ячейке, аля Range("A1"), но та ячейка которая мне нужна плавает по листу в зависимости от кол-ва строк расчета. И я решил сделать ее именованным диапазоном, и данный метод не может к нему обратиться Range("Итог"). Может я не так делаю, не тот синтаксис? Просто раньше в практике не было таких задач у меня...
Есть мысли или может другие методы обращения именно к именованному диапазону, который по факту имеет сдвиг по листу?

Автор - Timber_Wolf
Дата добавления - 30.01.2017 в 08:48
Timber_Wolf Дата: Понедельник, 30.01.2017, 08:49 | Сообщение № 9
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 107
Репутация: 2 ±
Замечаний: 0% ±

Excel 2010
bmv98rus, Процедура частая. Чуть ли не ежедневная...
 
Ответить
Сообщениеbmv98rus, Процедура частая. Чуть ли не ежедневная...

Автор - Timber_Wolf
Дата добавления - 30.01.2017 в 08:49
Timber_Wolf Дата: Понедельник, 30.01.2017, 08:53 | Сообщение № 10
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 107
Репутация: 2 ±
Замечаний: 0% ±

Excel 2010
Саня, Спс попробую в цикл запихнуть, погляжу на производительность...

Hugo, А можно по подробнее? Простой формулой что ли? Так то в моем примере я определяю и путь и имя файла strDirPath strFileName
 
Ответить
СообщениеСаня, Спс попробую в цикл запихнуть, погляжу на производительность...

Hugo, А можно по подробнее? Простой формулой что ли? Так то в моем примере я определяю и путь и имя файла strDirPath strFileName

Автор - Timber_Wolf
Дата добавления - 30.01.2017 в 08:53
Timber_Wolf Дата: Понедельник, 30.01.2017, 09:54 | Сообщение № 11
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 107
Репутация: 2 ±
Замечаний: 0% ±

Excel 2010
Саня, Умирает на [vba]
Код
Dim Recordset As ADODB.Recordset
[/vba] Пишет User-defined type not defined
 
Ответить
СообщениеСаня, Умирает на [vba]
Код
Dim Recordset As ADODB.Recordset
[/vba] Пишет User-defined type not defined

Автор - Timber_Wolf
Дата добавления - 30.01.2017 в 09:54
bmv98rus Дата: Понедельник, 30.01.2017, 10:41 | Сообщение № 12
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4147
Репутация: 772 ±
Замечаний: 0% ±

Excel 2013/2016
Timber_Wolf,
А пример от Сана работает? Если да, то References Библиотека ADO (Microsoft ActiveX Data Object

ADO


Замечательный Временно просто медведь , процентов на 20.
 
Ответить
СообщениеTimber_Wolf,
А пример от Сана работает? Если да, то References Библиотека ADO (Microsoft ActiveX Data Object

ADO

Автор - bmv98rus
Дата добавления - 30.01.2017 в 10:41
Timber_Wolf Дата: Понедельник, 30.01.2017, 11:06 | Сообщение № 13
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 107
Репутация: 2 ±
Замечаний: 0% ±

Excel 2010
bmv98rus, Повключал все библиотеки с названием начинающимся на Microsoft ActiveX Data Object заработал пример от Сана. Не тестировал правда пока на массовой обработке. Да и включение библиотек может не подойти... Т.к. начальник должен нажать кнопку и получить статистику, без лазания в настройки и тыканья мышкой нужные библиотеки...

Текущий вопрос остается актуальным... Надо без лишних действий по включению библиотек (представьте что вы бабушке дали этот файл, ей до фени библиотеки, не работает и все тут) =)))


Сообщение отредактировал Timber_Wolf - Понедельник, 30.01.2017, 12:08
 
Ответить
Сообщениеbmv98rus, Повключал все библиотеки с названием начинающимся на Microsoft ActiveX Data Object заработал пример от Сана. Не тестировал правда пока на массовой обработке. Да и включение библиотек может не подойти... Т.к. начальник должен нажать кнопку и получить статистику, без лазания в настройки и тыканья мышкой нужные библиотеки...

Текущий вопрос остается актуальным... Надо без лишних действий по включению библиотек (представьте что вы бабушке дали этот файл, ей до фени библиотеки, не работает и все тут) =)))

Автор - Timber_Wolf
Дата добавления - 30.01.2017 в 11:06
bmv98rus Дата: Понедельник, 30.01.2017, 12:04 | Сообщение № 14
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4147
Репутация: 772 ±
Замечаний: 0% ±

Excel 2013/2016
Timber_Wolf,

Повключал все библиотеки с названием начинающимся на Microsoft ActiveX Data Object
Странно, обычно файл несет с собой эти связи и скорее бывает проблема, когда библиотек нет или версии очень разные, тогда все скрипты не работают. Вы попробуйте на боевой версии скорее всего получится все как надо
начальник должен нажать кнопку
ну исходя из ранее написанного явно надо предусмотреть индикацию работы. За пару секунд полторы тысячи файлов по сети не обработать. Собственно я с самого начала на это внимание и пытался акцентировать, что может оказаться не будет огромного прироста в скорости из-за разных методов, особенно при таких количествах файлов.

P.S. Раз уж тему отдельную создали, то можно убрать лишнее из 13го поста.


Замечательный Временно просто медведь , процентов на 20.
 
Ответить
СообщениеTimber_Wolf,

Повключал все библиотеки с названием начинающимся на Microsoft ActiveX Data Object
Странно, обычно файл несет с собой эти связи и скорее бывает проблема, когда библиотек нет или версии очень разные, тогда все скрипты не работают. Вы попробуйте на боевой версии скорее всего получится все как надо
начальник должен нажать кнопку
ну исходя из ранее написанного явно надо предусмотреть индикацию работы. За пару секунд полторы тысячи файлов по сети не обработать. Собственно я с самого начала на это внимание и пытался акцентировать, что может оказаться не будет огромного прироста в скорости из-за разных методов, особенно при таких количествах файлов.

P.S. Раз уж тему отдельную создали, то можно убрать лишнее из 13го поста.

Автор - bmv98rus
Дата добавления - 30.01.2017 в 12:04
Timber_Wolf Дата: Понедельник, 30.01.2017, 13:48 | Сообщение № 15
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 107
Репутация: 2 ±
Замечаний: 0% ±

Excel 2010
_Boroda_, Идея с формулами хорошая и работает быстро... Но умирает код, на длинных названиях файлов похоже...
Обработал 112 файлов и ошибка. Опытным путем выяснил что умирает именно в макросе при длительности названия файла 148 символов...
Если с тем же файлом повторить операцию в ручную прописав формулу, берет значение...
Есть костыль какой нибудь?

PS: длинна всей формулы получается 189 символов.
Тут ограничения какие нибудь не срабатывают?


Сообщение отредактировал Timber_Wolf - Понедельник, 30.01.2017, 14:18
 
Ответить
Сообщение_Boroda_, Идея с формулами хорошая и работает быстро... Но умирает код, на длинных названиях файлов похоже...
Обработал 112 файлов и ошибка. Опытным путем выяснил что умирает именно в макросе при длительности названия файла 148 символов...
Если с тем же файлом повторить операцию в ручную прописав формулу, берет значение...
Есть костыль какой нибудь?

PS: длинна всей формулы получается 189 символов.
Тут ограничения какие нибудь не срабатывают?

Автор - Timber_Wolf
Дата добавления - 30.01.2017 в 13:48
Timber_Wolf Дата: Вторник, 31.01.2017, 10:21 | Сообщение № 16
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 107
Репутация: 2 ±
Замечаний: 0% ±

Excel 2010
_Boroda_, Уважаемый Борода. Вернитесь в дискуссию... Возникли вопросы по вами предложенному методу... =)))
 
Ответить
Сообщение_Boroda_, Уважаемый Борода. Вернитесь в дискуссию... Возникли вопросы по вами предложенному методу... =)))

Автор - Timber_Wolf
Дата добавления - 31.01.2017 в 10:21
_Boroda_ Дата: Вторник, 31.01.2017, 10:49 | Сообщение № 17
Группа: Админы
Ранг: Местный житель
Сообщений: 16886
Репутация: 6611 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Вариант сходу, не идеальный, зато сразу
В цикле когда идете, то проверяйте длину текстовой строки обращения (путь + название + расширение + лист + ячейка). Если меньше 148 символов, то как обычно, если больше, то выгружаете на лист формулой типа
[vba]
Код
Range("K1").FormulaLocal = "='C:...\[9658307_1.xlsx]Лист1'!G16"
[/vba] и считываете значение уже не из кода, а прямо из ячейки


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеВариант сходу, не идеальный, зато сразу
В цикле когда идете, то проверяйте длину текстовой строки обращения (путь + название + расширение + лист + ячейка). Если меньше 148 символов, то как обычно, если больше, то выгружаете на лист формулой типа
[vba]
Код
Range("K1").FormulaLocal = "='C:...\[9658307_1.xlsx]Лист1'!G16"
[/vba] и считываете значение уже не из кода, а прямо из ячейки

Автор - _Boroda_
Дата добавления - 31.01.2017 в 10:49
Timber_Wolf Дата: Вторник, 31.01.2017, 11:11 | Сообщение № 18
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 107
Репутация: 2 ±
Замечаний: 0% ±

Excel 2010
_Boroda_, Вы конечно простите что вас замучал... +)) Но оказывается я просто не внимательный криворук =)))
Я не правильно формировал строку формулы =)) На вашем последнем примере я нашел свои ошибки =)))
При этом танцы с бубном не понадобились и отработал стандартный вариант формулы =)))


Сообщение отредактировал Timber_Wolf - Вторник, 31.01.2017, 11:12
 
Ответить
Сообщение_Boroda_, Вы конечно простите что вас замучал... +)) Но оказывается я просто не внимательный криворук =)))
Я не правильно формировал строку формулы =)) На вашем последнем примере я нашел свои ошибки =)))
При этом танцы с бубном не понадобились и отработал стандартный вариант формулы =)))

Автор - Timber_Wolf
Дата добавления - 31.01.2017 в 11:11
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2025 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!