Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / заиметь полное имя любого файла в переменной (VBA Excel) / 25 сообщений из 32, страница 1 из 2
06.04.2011, 00:34
    #37201419
Learning_Oracle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заиметь полное имя любого файла в переменной (VBA Excel)
Как можно забрать в переменную полное имя любого файла, например text.txt, желательно вызвав окно файлового браузера и вручную указывая на файл. необходимо, чтобы он не сам открывался, а передавалось только его имя в переменную, для дальнейшей обработки. Все это в модуль VBA.
...
Рейтинг: 0 / 0
06.04.2011, 08:08
    #37201528
Ципихович Эндрю
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заиметь полное имя любого файла в переменной (VBA Excel)
Learning_Oracle, чувствую в этом
желательно вызвав окно файлового браузера и вручную указывая на файл
и есть камень преткновения
...
Рейтинг: 0 / 0
06.04.2011, 08:37
    #37201545
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заиметь полное имя любого файла в переменной (VBA Excel)
Изучай CommonDialogControl.
...
Рейтинг: 0 / 0
06.04.2011, 09:00
    #37201572
Yudzhin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заиметь полное имя любого файла в переменной (VBA Excel)
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.
Function GetJustName() As String

    Dim fd  As FileDialog
    Dim fso As New FileSystemObject

    ' Select file.
    Set fd = Application.FileDialog(msoFileDialogFilePicker)

    ' Clear pre-defined filters to select any file.
    fd.Filters.Clear

    ' If user selected nothing, exit sub.
    If fd.Show = False Then Exit Function

    ' Get file name with extension.
    GetJustName = fso.GetFile(fd.SelectedItems( 1 )).Name

End Function
...
Рейтинг: 0 / 0
06.04.2011, 11:08
    #37201813
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заиметь полное имя любого файла в переменной (VBA Excel)
Yudzhin,

К чему такие сложности? :-)
Код: plaintext
1.
2.
3.
Dim sFullFileName as String, sFileName as string
sFullFileName = Application.GetOpenFilename("Word Files(*.*),*.*", , "Выбрать файл", , False)
If sFullFileName = "False" Then Exit Sub
sFileName = Dir(sFullFileName,vbDirectory)
...
Рейтинг: 0 / 0
06.04.2011, 11:14
    #37201834
Yudzhin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заиметь полное имя любого файла в переменной (VBA Excel)
The_Prist,

Те же яйца - только в профиль.
...
Рейтинг: 0 / 0
06.04.2011, 11:45
    #37201936
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заиметь полное имя любого файла в переменной (VBA Excel)
Yudzhinе же яйца - только в профиль.Ну это да. Только мой вариант не использует "тяжелый" FSO для такой задачи. Считаю это неоправданным расходованием ресурсов.
...
Рейтинг: 0 / 0
06.04.2011, 12:26
    #37202094
Yudzhin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заиметь полное имя любого файла в переменной (VBA Excel)
The_PristYudzhinе же яйца - только в профиль.Ну это да. Только мой вариант не использует "тяжелый" FSO для такой задачи. Считаю это неоправданным расходованием ресурсов.

Расходы ресурсов? Цифры, сравнения?
...
Рейтинг: 0 / 0
06.04.2011, 13:17
    #37202331
Yudzhin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заиметь полное имя любого файла в переменной (VBA Excel)
The_PristК чему такие сложности? :-)
Код: plaintext
1.
2.
3.
...
If sFullFileName = "False" Then Exit Sub
...


Тогда уж sFullFileName = False , а не "False" . А если я выберу файл False??? :D
...
Рейтинг: 0 / 0
06.04.2011, 15:03
    #37202645
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заиметь полное имя любого файла в переменной (VBA Excel)
YudzhinТогда уж sFullFileName = False , а не "False" . А если я выберу файл False??? :DНу может Вы попробуете выбрать файл "False", а потом уже будете возмущаться?
Попробуйте свой метод sFullFileName = False и посмотрите, что у Вас получится хорошего. И предлагаю изучить мат.часть в области того, какие типы данных хранятся в переменной в зависимости от их типа. Я объявил переменную sFullFileName As String. Следовательно она никак не может хранить в себе тип данных Boolean, на который Вы ссылаетесь в своем посте, указывая на мою "неграмотность" в листинге.

Я Вас не отговариваю от использования FSO - это дело Ваше. Я предложил альтренативный вариант и если Вам он не нравится - держите, пожалуйста, свои эмоции при себе.
...
Рейтинг: 0 / 0
06.04.2011, 15:14
    #37202677
Yudzhin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заиметь полное имя любого файла в переменной (VBA Excel)
[quot The_Prist]YudzhinТогда уж sFullFileName = False , а не "False" . А если я выберу файл False??? :DНу может Вы попробуете выбрать файл "False", а потом уже будете возмущаться?
Попробуйте свой метод sFullFileName = False и посмотрите, что у Вас получится хорошего. И предлагаю изучить мат.часть в области того, какие типы данных хранятся в переменной в зависимости от их типа. Я объявил переменную sFullFileName As String. Следовательно она никак не может хранить в себе тип данных Boolean, на который Вы ссылаетесь в своем посте, указывая на мою "неграмотность" в листинге.
[quot]

Я знаю, что GetOpenFilename возвращает Variant. Я думал, что GetOpenFilename возвращает ТОЛЬКО название файла, что оказалось не так - он возвращает полный путь. Вот здесь я и оплошал. :) Это я увидел в Immediate Window. А про типы данных я знаю, что в Варианте может и Булеан, и Стринг храницо, так что мат.часть я знаю. ;)
...
Рейтинг: 0 / 0
06.04.2011, 15:20
    #37202697
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заиметь полное имя любого файла в переменной (VBA Excel)
YudzhinЯ знаю, что GetOpenFilename возвращает VariantGetOpenFilename может и возвращает, но у меня значение передается и хранится в заранее объявленной переменной, которой присвоен конкретный тип. А поменять тип объявленной переменной GetOpenFilename не в силах :-)
...
Рейтинг: 0 / 0
06.04.2011, 15:34
    #37202733
Yudzhin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заиметь полное имя любого файла в переменной (VBA Excel)
The_PristGetOpenFilename может и возвращает, но у меня значение передается и хранится в заранее объявленной переменной, которой присвоен конкретный тип. А поменять тип объявленной переменной GetOpenFilename не в силах :-)


А тебе пофиг, что возвращает функция?
Ну и что, что не может поменять? А если бы GetOpenFilename возвращал, например, объект Worksheet, то как бы ты сохранил его в переменной String? :) Учи мат.часть!

По твоей логике попробуй выполнить следующую процедуру, если тебе пофиг что возвращает GetOpenFilename:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Sub ThePristLogic()

    Dim s As String
    Dim w As Worksheet
    
    s = w
    
    MsgBox TypeName(s)

End Sub
...
Рейтинг: 0 / 0
06.04.2011, 15:50
    #37202771
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заиметь полное имя любого файла в переменной (VBA Excel)
Yudzhin,

Офф.Может не будем на личности переходить? Мне лично Ваше мнение не важно - не надо меня учить. Если Вы выдергиваете из написанного только то, что надо вам - это Ваше дело.
Я не писал что мне пофиг - я знаю что возвращает GetOpenFilename и применил как полагается. Теперь к Вам просьба - покажите, как с помощью GetOpenFilename получить объект Worksheet? Или попробуйте выполнить мой код так, чтобы ошибка появилась. Вот как получится - так у уже и можете рассказывать мне:
авторА тебе пофиг, что возвращает функция?


Сравнивать Ваш последний код с моим - бред, т.к. у меня заведомо будет получен либо путь к файлу, либо "False", а в Вашем - заведомо нарушено присвоение значения переменным. У меня ничего не нарушено и отрабатывает как надо. Если Вас это так раздражает - я не принуждаю использовать мой код.
Не понимаю только зачем надо было писать, что мой код не рабочий(про какие-то там файлы "False" упоминать) если даже не удосужились опробовать, и тем более не зная в полной мере про возвращаемые GetOpenFilename значения.
...
Рейтинг: 0 / 0
06.04.2011, 15:54
    #37202784
Ципихович Эндрю
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заиметь полное имя любого файла в переменной (VBA Excel)
а Липецк это в Челябинской области?
...
Рейтинг: 0 / 0
06.04.2011, 16:05
    #37202820
Yudzhin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заиметь полное имя любого файла в переменной (VBA Excel)
The_Prist,

Тогда нестыковка:

The_PristGetOpenFilename может и возвращает

и
The_PristЯ не писал что мне пофиг - я знаю что возвращает GetOpenFilename


Как это понять?
...
Рейтинг: 0 / 0
06.04.2011, 16:06
    #37202822
Yudzhin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заиметь полное имя любого файла в переменной (VBA Excel)
Ципихович Эндрю,

Нет, это деревня в Ярославле.
...
Рейтинг: 0 / 0
06.04.2011, 16:26
    #37202892
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заиметь полное имя любого файла в переменной (VBA Excel)
Yudzhin,

А полностью из слов фразы Вы складывать не умеете? Или до конца дочитывать?
The_PristGetOpenFilename может и возвращает, но у меня значение передается и хранится в заранее объявленной переменной, которой присвоен конкретный тип - и это не одно и то же, что пофиг. Я знаю, что данная функция возвращает и явно указал, что даже если GetOpenFilename возвращает Variant, то внутри моей переменной он преобразуется в конкретный тип(в данном случае String). И данное преобразование никакого ущерба коду не несет.

А вот Вы мне так и не показали, как же можно в моем коде вызвать ошибку. И не показали, как же мне с помощью обсуждаемой функции получить объект Worksheet. Я все еще с нетерпением жду этих ответов, т.к. мне действительно интересно как это можно сделать. А Вам явно уже удалось, судя по Ваших же словам:
авторА если бы GetOpenFilename возвращал, например, объект Worksheet, то как бы ты сохранил его в переменной String? :) Учи мат.часть!
Очевидно, я не все свойства и аргументы данной функции знаю, но так полагаю, что их знаете Вы. Вот когда покажете как это сделать - тогда и можете мне говорить про мат.часть. Пока что только Вы в данной области не очень осведомлены, судя по Вашим высказываниям.
...
Рейтинг: 0 / 0
06.04.2011, 16:54
    #37202966
Yudzhin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заиметь полное имя любого файла в переменной (VBA Excel)
The_Prist,

The_PristGetOpenFilename может и возвращает, но у меня значение передается и хранится в заранее объявленной переменной, которой присвоен конкретный тип

Ещё раз повторю вопрос: что означают слова "может и возвращает"? Cлово "может" в Вашем случае - это вводное слово, которое означает, что Вы сомневаетесь. Может, возвращает. Может, не возвращает. Вот и логика: мне всё равно, что там функция возвращает - самое главное, что она должна быть String. :D

The_PristА вот Вы мне так и не показали, как же можно в моем коде вызвать ошибку.

Я ж написал, что я ошибся. Но я ошибся не типах, а в том, что возвращается ПОЛНЫЙ путь к файлу, а не название файла.

The_PristИ не показали, как же мне с помощью обсуждаемой функции получить объект Worksheet.
YudzhinА если бы GetOpenFilename возвращал, например, объект Worksheet, то как бы ты сохранил его в переменной String? :) Учи мат.часть!

Ключевое слово - "если бы".
...
Рейтинг: 0 / 0
06.04.2011, 17:16
    #37203007
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заиметь полное имя любого файла в переменной (VBA Excel)
Офф.YudzhinЕщё раз повторю вопрос: что означают слова "может и возвращает"? Cлово "может" в Вашем случае - это вводное слово, которое означает, что Вы сомневаетесь.
А может я сам буду решать какой смысл в слова вкладывать, не спрашивая Вас? В моем случае слово "может" означает не то, во что превратили его Вы:
The_PristYudzhinЯ знаю, что GetOpenFilename возвращает VariantGetOpenFilename может и возвращает, но у меня значение передается и хранится в заранее объявленной переменной, которой присвоен конкретный тип. А поменять тип объявленной переменной GetOpenFilename не в силах :-)Ключевая связка фраз:
"GetOpenFilename возвращает Variant - GetOpenFilename может и возвращает"
Пояснять дальше? Думаю да, т.к. Вы опять прочтете только то, что хотите, а не то, что написано. Вы написали, что GetOpenFilename возвращает Variant, на что я ответил, что она-то может и возвращает, но я его преобразую в нужный мне тип. Таким образом в моей фразе слово "может" имеет более связующий смысл, нежели отражение моего сомнения.
Единственное, не знаю как Вам донести значение слова "возвращает"? Может Вам в форум по русскому языку обратиться?

YudzhinКлючевое слово - "если бы".если бы у бабушки были яйца - была бы не бабушка, а дедушка.
Какое тогда имеет отношение Ваше высказывание к моему коду и к данной теме? Если бы GetOpenFilename умел возвращать объект Worksheet - был бы другой код. Хотя вот как раз здесь не уверен, т.к. этого нет и с точностью сказать ничего нельзя.

Я все еще жду пример того, как в моем коде можно вызвать ошибку.
...
Рейтинг: 0 / 0
06.04.2011, 17:23
    #37203032
Yudzhin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заиметь полное имя любого файла в переменной (VBA Excel)
The_Prist,

Короче, я не буду больше ничего объяснять, а только укажу на 100% неверное Ваше рассуждение:

Код: plaintext
1.
2.
"GetOpenFilename возвращает Variant - GetOpenFilename может и возвращает"
Пояснять дальше? Думаю да, т.к. Вы опять прочтете только то, что хотите, а не то, что написано. Вы написали, что GetOpenFilename возвращает Variant, на что я ответил, что она-то может и возвращает, но я его преобразую в нужный мне тип. Таким образом в моей фразе слово "может" имеет более связующий смысл, нежели отражение моего сомнения.

Поясняю по шагам Ваши действия с функцией:
1. Сначала функция GetOpenFilename возвращает Variant.
2. После того, как Вы получили Variant, Вы преобразуете его в String (неявно, конечно).

Итак, нет такого "может, возвращает Variant" - ОНА ВОЗВРАЩАЕТ VARIANT!
Тема закрыта.
...
Рейтинг: 0 / 0
06.04.2011, 17:29
    #37203057
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заиметь полное имя любого файла в переменной (VBA Excel)
Мне не надо пояснять по шагам действия с функцией - я их давно уже сам расписал, а Вы это читать не захотели. Вы просто цепляетесь к словам. Но раз цепляетесь - тогда уж тема не закрыта. ПОКАЖИТЕ ПРИМЕР , где бы мой код вызвал ошибку. Раз уж Вы сами упомянули про ЕСЛИ - будьте любезны в полной мере это обосновать и привести примеры этих самых ЕСЛИ. Я, в отличии от Вас, не писал, что Ваш код нерабочий и вызывает ошибки при всяких "False". Так что жду от Вас пример, как от человека, очень тщательно рассматривающего каждое слово.
...
Рейтинг: 0 / 0
06.04.2011, 17:34
    #37203069
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заиметь полное имя любого файла в переменной (VBA Excel)
YudzhinИтак, нет такого "может, возвращает Variant" - ОНА ВОЗВРАЩАЕТ VARIANT!Как раз вот эта Ваша фраза и говорит о том, что Вы выцепили из моей фразы только то, что надо Вам, а не то, что написано. Я не отрицал, что функция возвращает Variant. Я написал, что я этот Variant привожу к нужному мне типу в переменной. Притом мое высказывание лишь поясняло, почему у меня написано "False", а не False. И пояснял я это не потому, что думал, что этого не знаете Вы, а потому, что это ФОРУМ и читать тему могут другие люди, которым это может понадобиться.
...
Рейтинг: 0 / 0
06.04.2011, 17:46
    #37203106
Yudzhin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заиметь полное имя любого файла в переменной (VBA Excel)
The_Prist,

Хорошо, отвечу завтра. Пора домой. :)
Напоследок я ешё раз скажу, что я БЫЛ НЕПРАВ, что Ваша процедура не работает и пояснил, из-за чего вышло недоразумение. Я решил разобраться и увидел в Immediate Window, что GetOpenFilename возвращает ПОЛНЫЙ путь! Поэтому если даже и выбрать файл False, то это ничего страшного. Просто Вы написали "False" - в кавычках, а это - строковая переменная. Это меня и сбило с толку. За это я извиняюсь, что не проверил. Вот так было бы яснее:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Dim sFullFileName As String
Dim sFileName As string
Dim result As Variant
result = Application.GetOpenFilename("Word Files(*.*),*.*", , "Выбрать файл", , False)
If result = False Then Exit Sub
sFullFileName = result '<-- Вот здесь неявно Variant конвертится в String.
sFileName = Dir(sFullFileName,vbDirectory)
...
Рейтинг: 0 / 0
06.04.2011, 17:56
    #37203134
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заиметь полное имя любого файла в переменной (VBA Excel)
YudzhinВот так было бы яснее:Если бы Вы нормально об этом спросили - я бы пояснил как угодно, лишь бы донести суть. Но Вас чем-то задел не только этот код, но и слова "может" и прочее. Про то, что Вам что-то неясно или что-то сбило с толку я слышу впервые.
Этой фразой:
авторИ предлагаю изучить мат.часть в области того, какие типы данных хранятся в переменной в зависимости от их типа.не собирался как-то задеть Вас. Просто действительно это азы: переменная может хранить данные только тот типа, который ей присвоили, если это не переменная типа Variant. В моем коде переменных данного типа нет. И я даже не думал, что неявное преобразование мной типа данных может ввести в заблуждение.

P.S. А FSO все же медленный в работе. И для инфо: Ваш код не будет работать в версии офиса младше 2003. Т.к. метод Application.FileDialog появился именно в 2003. Как ни прискорбно, но многие все еще работают на 2000...
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / заиметь полное имя любого файла в переменной (VBA Excel) / 25 сообщений из 32, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]