|
|
|
заиметь полное имя любого файла в переменной (VBA Excel)
|
|||
|---|---|---|---|
|
#18+
Как можно забрать в переменную полное имя любого файла, например text.txt, желательно вызвав окно файлового браузера и вручную указывая на файл. необходимо, чтобы он не сам открывался, а передавалось только его имя в переменную, для дальнейшей обработки. Все это в модуль VBA. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2011, 00:34 |
|
||
|
заиметь полное имя любого файла в переменной (VBA Excel)
|
|||
|---|---|---|---|
|
#18+
Learning_Oracle, чувствую в этом желательно вызвав окно файлового браузера и вручную указывая на файл и есть камень преткновения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2011, 08:08 |
|
||
|
заиметь полное имя любого файла в переменной (VBA Excel)
|
|||
|---|---|---|---|
|
#18+
Изучай CommonDialogControl. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2011, 08:37 |
|
||
|
заиметь полное имя любого файла в переменной (VBA Excel)
|
|||
|---|---|---|---|
|
#18+
Learning_Oracle, Сделай ссылку: Tools -> References -> Microsoft Scripting Runtime. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2011, 09:00 |
|
||
|
заиметь полное имя любого файла в переменной (VBA Excel)
|
|||
|---|---|---|---|
|
#18+
Yudzhin, К чему такие сложности? :-) Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2011, 11:08 |
|
||
|
заиметь полное имя любого файла в переменной (VBA Excel)
|
|||
|---|---|---|---|
|
#18+
The_Prist, Те же яйца - только в профиль. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2011, 11:14 |
|
||
|
заиметь полное имя любого файла в переменной (VBA Excel)
|
|||
|---|---|---|---|
|
#18+
Yudzhinе же яйца - только в профиль.Ну это да. Только мой вариант не использует "тяжелый" FSO для такой задачи. Считаю это неоправданным расходованием ресурсов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2011, 11:45 |
|
||
|
заиметь полное имя любого файла в переменной (VBA Excel)
|
|||
|---|---|---|---|
|
#18+
The_PristYudzhinе же яйца - только в профиль.Ну это да. Только мой вариант не использует "тяжелый" FSO для такой задачи. Считаю это неоправданным расходованием ресурсов. Расходы ресурсов? Цифры, сравнения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2011, 12:26 |
|
||
|
заиметь полное имя любого файла в переменной (VBA Excel)
|
|||
|---|---|---|---|
|
#18+
The_PristК чему такие сложности? :-) Код: plaintext 1. 2. 3. Тогда уж sFullFileName = False , а не "False" . А если я выберу файл False??? :D ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2011, 13:17 |
|
||
|
заиметь полное имя любого файла в переменной (VBA Excel)
|
|||
|---|---|---|---|
|
#18+
YudzhinТогда уж sFullFileName = False , а не "False" . А если я выберу файл False??? :DНу может Вы попробуете выбрать файл "False", а потом уже будете возмущаться? Попробуйте свой метод sFullFileName = False и посмотрите, что у Вас получится хорошего. И предлагаю изучить мат.часть в области того, какие типы данных хранятся в переменной в зависимости от их типа. Я объявил переменную sFullFileName As String. Следовательно она никак не может хранить в себе тип данных Boolean, на который Вы ссылаетесь в своем посте, указывая на мою "неграмотность" в листинге. Я Вас не отговариваю от использования FSO - это дело Ваше. Я предложил альтренативный вариант и если Вам он не нравится - держите, пожалуйста, свои эмоции при себе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2011, 15:03 |
|
||
|
заиметь полное имя любого файла в переменной (VBA Excel)
|
|||
|---|---|---|---|
|
#18+
[quot The_Prist]YudzhinТогда уж sFullFileName = False , а не "False" . А если я выберу файл False??? :DНу может Вы попробуете выбрать файл "False", а потом уже будете возмущаться? Попробуйте свой метод sFullFileName = False и посмотрите, что у Вас получится хорошего. И предлагаю изучить мат.часть в области того, какие типы данных хранятся в переменной в зависимости от их типа. Я объявил переменную sFullFileName As String. Следовательно она никак не может хранить в себе тип данных Boolean, на который Вы ссылаетесь в своем посте, указывая на мою "неграмотность" в листинге. [quot] Я знаю, что GetOpenFilename возвращает Variant. Я думал, что GetOpenFilename возвращает ТОЛЬКО название файла, что оказалось не так - он возвращает полный путь. Вот здесь я и оплошал. :) Это я увидел в Immediate Window. А про типы данных я знаю, что в Варианте может и Булеан, и Стринг храницо, так что мат.часть я знаю. ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2011, 15:14 |
|
||
|
заиметь полное имя любого файла в переменной (VBA Excel)
|
|||
|---|---|---|---|
|
#18+
YudzhinЯ знаю, что GetOpenFilename возвращает VariantGetOpenFilename может и возвращает, но у меня значение передается и хранится в заранее объявленной переменной, которой присвоен конкретный тип. А поменять тип объявленной переменной GetOpenFilename не в силах :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2011, 15:20 |
|
||
|
заиметь полное имя любого файла в переменной (VBA Excel)
|
|||
|---|---|---|---|
|
#18+
The_PristGetOpenFilename может и возвращает, но у меня значение передается и хранится в заранее объявленной переменной, которой присвоен конкретный тип. А поменять тип объявленной переменной GetOpenFilename не в силах :-) А тебе пофиг, что возвращает функция? Ну и что, что не может поменять? А если бы GetOpenFilename возвращал, например, объект Worksheet, то как бы ты сохранил его в переменной String? :) Учи мат.часть! По твоей логике попробуй выполнить следующую процедуру, если тебе пофиг что возвращает GetOpenFilename: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2011, 15:34 |
|
||
|
заиметь полное имя любого файла в переменной (VBA Excel)
|
|||
|---|---|---|---|
|
#18+
Yudzhin, Офф.Может не будем на личности переходить? Мне лично Ваше мнение не важно - не надо меня учить. Если Вы выдергиваете из написанного только то, что надо вам - это Ваше дело. Я не писал что мне пофиг - я знаю что возвращает GetOpenFilename и применил как полагается. Теперь к Вам просьба - покажите, как с помощью GetOpenFilename получить объект Worksheet? Или попробуйте выполнить мой код так, чтобы ошибка появилась. Вот как получится - так у уже и можете рассказывать мне: авторА тебе пофиг, что возвращает функция? Сравнивать Ваш последний код с моим - бред, т.к. у меня заведомо будет получен либо путь к файлу, либо "False", а в Вашем - заведомо нарушено присвоение значения переменным. У меня ничего не нарушено и отрабатывает как надо. Если Вас это так раздражает - я не принуждаю использовать мой код. Не понимаю только зачем надо было писать, что мой код не рабочий(про какие-то там файлы "False" упоминать) если даже не удосужились опробовать, и тем более не зная в полной мере про возвращаемые GetOpenFilename значения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2011, 15:50 |
|
||
|
заиметь полное имя любого файла в переменной (VBA Excel)
|
|||
|---|---|---|---|
|
#18+
а Липецк это в Челябинской области? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2011, 15:54 |
|
||
|
заиметь полное имя любого файла в переменной (VBA Excel)
|
|||
|---|---|---|---|
|
#18+
The_Prist, Тогда нестыковка: The_PristGetOpenFilename может и возвращает и The_PristЯ не писал что мне пофиг - я знаю что возвращает GetOpenFilename Как это понять? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2011, 16:05 |
|
||
|
заиметь полное имя любого файла в переменной (VBA Excel)
|
|||
|---|---|---|---|
|
#18+
Ципихович Эндрю, Нет, это деревня в Ярославле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2011, 16:06 |
|
||
|
заиметь полное имя любого файла в переменной (VBA Excel)
|
|||
|---|---|---|---|
|
#18+
Yudzhin, А полностью из слов фразы Вы складывать не умеете? Или до конца дочитывать? The_PristGetOpenFilename может и возвращает, но у меня значение передается и хранится в заранее объявленной переменной, которой присвоен конкретный тип - и это не одно и то же, что пофиг. Я знаю, что данная функция возвращает и явно указал, что даже если GetOpenFilename возвращает Variant, то внутри моей переменной он преобразуется в конкретный тип(в данном случае String). И данное преобразование никакого ущерба коду не несет. А вот Вы мне так и не показали, как же можно в моем коде вызвать ошибку. И не показали, как же мне с помощью обсуждаемой функции получить объект Worksheet. Я все еще с нетерпением жду этих ответов, т.к. мне действительно интересно как это можно сделать. А Вам явно уже удалось, судя по Ваших же словам: авторА если бы GetOpenFilename возвращал, например, объект Worksheet, то как бы ты сохранил его в переменной String? :) Учи мат.часть! Очевидно, я не все свойства и аргументы данной функции знаю, но так полагаю, что их знаете Вы. Вот когда покажете как это сделать - тогда и можете мне говорить про мат.часть. Пока что только Вы в данной области не очень осведомлены, судя по Вашим высказываниям. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2011, 16:26 |
|
||
|
заиметь полное имя любого файла в переменной (VBA Excel)
|
|||
|---|---|---|---|
|
#18+
The_Prist, The_PristGetOpenFilename может и возвращает, но у меня значение передается и хранится в заранее объявленной переменной, которой присвоен конкретный тип Ещё раз повторю вопрос: что означают слова "может и возвращает"? Cлово "может" в Вашем случае - это вводное слово, которое означает, что Вы сомневаетесь. Может, возвращает. Может, не возвращает. Вот и логика: мне всё равно, что там функция возвращает - самое главное, что она должна быть String. :D The_PristА вот Вы мне так и не показали, как же можно в моем коде вызвать ошибку. Я ж написал, что я ошибся. Но я ошибся не типах, а в том, что возвращается ПОЛНЫЙ путь к файлу, а не название файла. The_PristИ не показали, как же мне с помощью обсуждаемой функции получить объект Worksheet. YudzhinА если бы GetOpenFilename возвращал, например, объект Worksheet, то как бы ты сохранил его в переменной String? :) Учи мат.часть! Ключевое слово - "если бы". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2011, 16:54 |
|
||
|
заиметь полное имя любого файла в переменной (VBA Excel)
|
|||
|---|---|---|---|
|
#18+
Офф.YudzhinЕщё раз повторю вопрос: что означают слова "может и возвращает"? Cлово "может" в Вашем случае - это вводное слово, которое означает, что Вы сомневаетесь. The_PristYudzhinЯ знаю, что GetOpenFilename возвращает VariantGetOpenFilename может и возвращает, но у меня значение передается и хранится в заранее объявленной переменной, которой присвоен конкретный тип. А поменять тип объявленной переменной GetOpenFilename не в силах :-)Ключевая связка фраз: "GetOpenFilename возвращает Variant - GetOpenFilename может и возвращает" Пояснять дальше? Думаю да, т.к. Вы опять прочтете только то, что хотите, а не то, что написано. Вы написали, что GetOpenFilename возвращает Variant, на что я ответил, что она-то может и возвращает, но я его преобразую в нужный мне тип. Таким образом в моей фразе слово "может" имеет более связующий смысл, нежели отражение моего сомнения. Единственное, не знаю как Вам донести значение слова "возвращает"? Может Вам в форум по русскому языку обратиться? YudzhinКлючевое слово - "если бы".если бы у бабушки были яйца - была бы не бабушка, а дедушка. Какое тогда имеет отношение Ваше высказывание к моему коду и к данной теме? Если бы GetOpenFilename умел возвращать объект Worksheet - был бы другой код. Хотя вот как раз здесь не уверен, т.к. этого нет и с точностью сказать ничего нельзя. Я все еще жду пример того, как в моем коде можно вызвать ошибку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2011, 17:16 |
|
||
|
заиметь полное имя любого файла в переменной (VBA Excel)
|
|||
|---|---|---|---|
|
#18+
The_Prist, Короче, я не буду больше ничего объяснять, а только укажу на 100% неверное Ваше рассуждение: Код: plaintext 1. 2. Поясняю по шагам Ваши действия с функцией: 1. Сначала функция GetOpenFilename возвращает Variant. 2. После того, как Вы получили Variant, Вы преобразуете его в String (неявно, конечно). Итак, нет такого "может, возвращает Variant" - ОНА ВОЗВРАЩАЕТ VARIANT! Тема закрыта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2011, 17:23 |
|
||
|
заиметь полное имя любого файла в переменной (VBA Excel)
|
|||
|---|---|---|---|
|
#18+
Мне не надо пояснять по шагам действия с функцией - я их давно уже сам расписал, а Вы это читать не захотели. Вы просто цепляетесь к словам. Но раз цепляетесь - тогда уж тема не закрыта. ПОКАЖИТЕ ПРИМЕР , где бы мой код вызвал ошибку. Раз уж Вы сами упомянули про ЕСЛИ - будьте любезны в полной мере это обосновать и привести примеры этих самых ЕСЛИ. Я, в отличии от Вас, не писал, что Ваш код нерабочий и вызывает ошибки при всяких "False". Так что жду от Вас пример, как от человека, очень тщательно рассматривающего каждое слово. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2011, 17:29 |
|
||
|
заиметь полное имя любого файла в переменной (VBA Excel)
|
|||
|---|---|---|---|
|
#18+
YudzhinИтак, нет такого "может, возвращает Variant" - ОНА ВОЗВРАЩАЕТ VARIANT!Как раз вот эта Ваша фраза и говорит о том, что Вы выцепили из моей фразы только то, что надо Вам, а не то, что написано. Я не отрицал, что функция возвращает Variant. Я написал, что я этот Variant привожу к нужному мне типу в переменной. Притом мое высказывание лишь поясняло, почему у меня написано "False", а не False. И пояснял я это не потому, что думал, что этого не знаете Вы, а потому, что это ФОРУМ и читать тему могут другие люди, которым это может понадобиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2011, 17:34 |
|
||
|
заиметь полное имя любого файла в переменной (VBA Excel)
|
|||
|---|---|---|---|
|
#18+
The_Prist, Хорошо, отвечу завтра. Пора домой. :) Напоследок я ешё раз скажу, что я БЫЛ НЕПРАВ, что Ваша процедура не работает и пояснил, из-за чего вышло недоразумение. Я решил разобраться и увидел в Immediate Window, что GetOpenFilename возвращает ПОЛНЫЙ путь! Поэтому если даже и выбрать файл False, то это ничего страшного. Просто Вы написали "False" - в кавычках, а это - строковая переменная. Это меня и сбило с толку. За это я извиняюсь, что не проверил. Вот так было бы яснее: Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2011, 17:46 |
|
||
|
заиметь полное имя любого файла в переменной (VBA Excel)
|
|||
|---|---|---|---|
|
#18+
YudzhinВот так было бы яснее:Если бы Вы нормально об этом спросили - я бы пояснил как угодно, лишь бы донести суть. Но Вас чем-то задел не только этот код, но и слова "может" и прочее. Про то, что Вам что-то неясно или что-то сбило с толку я слышу впервые. Этой фразой: авторИ предлагаю изучить мат.часть в области того, какие типы данных хранятся в переменной в зависимости от их типа.не собирался как-то задеть Вас. Просто действительно это азы: переменная может хранить данные только тот типа, который ей присвоили, если это не переменная типа Variant. В моем коде переменных данного типа нет. И я даже не думал, что неявное преобразование мной типа данных может ввести в заблуждение. P.S. А FSO все же медленный в работе. И для инфо: Ваш код не будет работать в версии офиса младше 2003. Т.к. метод Application.FileDialog появился именно в 2003. Как ни прискорбно, но многие все еще работают на 2000... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2011, 17:56 |
|
||
|
заиметь полное имя любого файла в переменной (VBA Excel)
|
|||
|---|---|---|---|
|
#18+
спасибо за помощь! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2011, 19:45 |
|
||
|
заиметь полное имя любого файла в переменной (VBA Excel)
|
|||
|---|---|---|---|
|
#18+
The_PristP.S. А FSO все же медленный в работе. И для инфо: Ваш код не будет работать в версии офиса младше 2003. Т.к. метод Application.FileDialog появился именно в 2003. Как ни прискорбно, но многие все еще работают на 2000... Честно скажу, что не вдавался в эти различия версий. И вообще человек, задающий вопрос по данной тематике (Microsoft Office), должен указать, какой версией Офиса он пользуется. Я-то начинал VBA c 2003-го (сам Офис - с 97). Ну а по поводу "медленный". Конкретно, какие примеры, сравнения? Просто хочу выяснить, почему он медленный. Заранее благодарен за ответ! :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2011, 08:14 |
|
||
|
заиметь полное имя любого файла в переменной (VBA Excel)
|
|||
|---|---|---|---|
|
#18+
Yudzhin, Пример попозже постараюсь состряпать, т.к. косяки FSO в медленности на одной операции не покажешшь. А если брать теорию и логику: всё что подключается пользователем в ссылках работает через COM. Отсюда вывод: Требуется время на обработку интерфейсов. И это обращение к COM идет каждый раз при обращении к функциям, свойствам и методам объекта. Если не прав - поправьте. А вообще, даже в Вашем коде FSO лишний(здесь VBA без него управится польностью): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2011, 09:58 |
|
||
|
заиметь полное имя любого файла в переменной (VBA Excel)
|
|||
|---|---|---|---|
|
#18+
Попробуйте вот так протестировать на скорость: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2011, 11:00 |
|
||
|
заиметь полное имя любого файла в переменной (VBA Excel)
|
|||
|---|---|---|---|
|
#18+
The_Prist, Отчёт. :-) В папке - 1513 файлов. Стандартный метод - 0,05. FileSystemObject - 0,16. В три раза быстрее. :-) Но эта разница не ощутима даже при таком огромном количестве файлов. :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2011, 11:23 |
|
||
|
заиметь полное имя любого файла в переменной (VBA Excel)
|
|||
|---|---|---|---|
|
#18+
Yudzhin, А причем здесь кол-во файлов, если мы анализируем лишь один(первый) - .SelectedItems(1) ? :-) Да и к тому же - все зависит еще и от конфигурации компьютера. Не у всех установлены даже Core2Duo(бывает намного хуже...). А на слабых машинах Ваши миллисекунды могут обратиться в секунды и даже минуты, в зависимости от выполняемых задач. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2011, 11:30 |
|
||
|
заиметь полное имя любого файла в переменной (VBA Excel)
|
|||
|---|---|---|---|
|
#18+
The_Prist, Мой метод: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. Отчёт. :-) В папке - 1513 файлов. Стандартный метод - 0,007. FileSystemObject - 0,28. Разница ощутима. :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2011, 11:58 |
|
||
|
|

start [/forum/topic.php?all=1&fid=61&tid=2177002]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
164ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
| others: | 217ms |
| total: | 478ms |

| 0 / 0 |
