Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.01.2012, 16:28   #11
@лeся
Пользователь
 
Аватар для @лeся
 
Регистрация: 04.01.2012
Сообщений: 44
По умолчанию

вот что выдает
Изображения
Тип файла: jpg exp.JPG (38.5 Кб, 96 просмотров)
@лeся вне форума Ответить с цитированием
Старый 05.01.2012, 17:04   #12
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,034
По умолчанию

1 в момент ошибки чему равно
d?
2 ответьте на мой вопрос из 8 го поста
Ципихович Эндрю вне форума Ответить с цитированием
Старый 05.01.2012, 18:03   #13
@лeся
Пользователь
 
Аватар для @лeся
 
Регистрация: 04.01.2012
Сообщений: 44
По умолчанию

1. - empty почему то
Код:
d = Split(vrtSelectedItem, "\")

2. на пост #8 я ответила в первой части #9 ...
и еще,я не понимаю,чем плохо ,то что я использовала такой вот метод

Код:
        If .Show = -1 Then
                 For Each vrtSelectedItem In .SelectedItems
                     s = Mid(vrtSelectedItem, 1, Len(vrtSelectedItem) - InStr(1, StrReverse(vrtSelectedItem), ".")) 'отсечение расширения файла
                     a = Mid(s, InStrRev(vrtSelectedItem, "\") + 1)                                                 'разбиение по "\",и отсечене пути файла.
'                     MsgBox "Selected item's FileName: " & a
                     Me.ListBox1.AddItem a
                Next vrtSelectedItem
            Else
        End If
может я чего то не понимаю? и дальше будут проблемы с данным методом(подводные камни)?
я пока поэтапно иду...


п.с. картинка относится к пункту 1.
Изображения
Тип файла: jpg oipio.JPG (45.7 Кб, 95 просмотров)
@лeся вне форума Ответить с цитированием
Старый 05.01.2012, 18:13   #14
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,034
По умолчанию

>чем плохо ,то что я использовала такой вот метод
если бы он шёл без проблем, тогда бы и спрашивали
а пока ответ очевиден, плох тем что ухо надо держать востро
Ципихович Эндрю вне форума Ответить с цитированием
Старый 05.01.2012, 18:27   #15
@лeся
Пользователь
 
Аватар для @лeся
 
Регистрация: 04.01.2012
Сообщений: 44
По умолчанию

дак мой (т.е.выбранный и собранный из ответов тут) идет (пока) вроде без проблем, осталось решить остальное: вставку уже в таблицу, в разные строки,ну и собственно как видно по картинке в #1, возможность удалять в списке, и наверное предполагается перемещение в списке вверх-вниз.

просто с этим d = split () хотела показать автору, что не работает как то.
@лeся вне форума Ответить с цитированием
Старый 05.01.2012, 22:20   #16
Пименов Александр
Форумчанин
 
Регистрация: 17.11.2010
Сообщений: 222
По умолчанию

Вообще бы для удобства работы с формой ввел несколько постоянных свойств и функций:

Код:
Public Property Get FSO() As FileSystemObject ' FSO будет всегда новым объектом FileSystemObject
    Set FSO = New FileSystemObject
End Property

Public Property Get FileDialog() As FileDialog ' FileDialog будет всегда Application.FileDialog(msoFileDialogFilePicker)
    Set FileDialog = Application.FileDialog(msoFileDialogFilePicker)
End Property

Public Function ListFile() As Variant ' Функция создает список файлов
Dim lst() As file, SelItem As String
    For i = 0 To FileDialog.SelectedItems.Count - 1
        j = i + 1
        ReDim Preserve lst(0 To i)
            Set lst(i) = FSO.GetFile(FileDialog.SelectedItems(j))
    Next i
    ListFile = lst
End Function

Public Function ListFileName() As Variant ' Функция создает список имен файлов без расширения
Dim lst() As String, f As File
    For i = 0 To UBound(ListFile)
        ReDim Preserve lst(0 To i)
            Set f = ListFile(i)
            lst(i) = f.GetBaseName
    Next i
    ListFileName = lst
End Function

Public Function ListFilePath() As Variant ' Функция создает список полных имен файлов
Dim lst() As String, f As File
    For i = 0 To UBound(ListFile)
        ReDim Preserve lst(0 To i)
            Set f = ListFile(i)
            lst(i) = ListFile(i).Path
    Next i
    ListFilePath = lst
End Function
Тогда легко написать код для заполнения элемента элемента ListBox в котором будет будет выводиться список файлов.
Код:
Me.ListBox1.Clear ' Очищаем список
Me.ListBox1.List = ListFileName ' Заполняем список именами файлов без расширения
Пименов Александр вне форума Ответить с цитированием
Старый 05.01.2012, 22:49   #17
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,034
По умолчанию

вот, Алеся, от чего ушли, к тому и пришли
а split в данном случае для увеличения кругозора
Ципихович Эндрю вне форума Ответить с цитированием
Старый 06.01.2012, 04:32   #18
Пименов Александр
Форумчанин
 
Регистрация: 17.11.2010
Сообщений: 222
По умолчанию

Конечно при работе с файлами удобнее пользоваться объектом FileSystemObject, но свойство FileDialog.Filters при открытии имеет только 1 фильтр Все файлы следовательно логично в код формы добавить свойство FileDialogFilter которое создает список фильтров, стоит учитывать что FileDialog.Filter имеет 2 интересных свойства Description и Extensions по этому при записи кода FileDialogFilter эти понятия надо разделять ";"
Код:
Public Property Get FileDialogFilter() As Variant
Dim lst(0 To 4) As String
    lst(0) = "Все файлы;*.*"
    lst(1) = "Файлы Word;*.docx,*.docm,*.dotx,*.dotm,*.doc,*.dot,*.htm,*.html,*.rtf,*.mht,*.mhtml,*.xml,*.odt"
    lst(2) = "Файлы Excel;*.xl,*.xlsx,*.xlsm,*.xlsb,*.xlam,*.xltx,*.xltm,*.xls,*.xlt,*.htm,*.html,*.mht,*.mhtml,*.xml,*.xla,*.xlm,*.xlw,*.odc,*.uxdc,*.ods"
    lst(3) = "Файлы PowerPoint;*.pptx,*.ppt,*.pptm,*.ppsx,*.pps,*.ppsm,*.potx,*.pot,*.potm,*.odp"
    FileFilter = lst
End Property
Тогда логично написать двe функции одна FileType будет определять типы файлов списка FileDialogFilter, а вторая ListFileType будет определять расширения выбранного типа файлов.
Код:
Public Property Get FileType() As Variant
Dim lst() As String, n As Variant, i As Byte
ReDim Preserve lst(0 To UBound(FileFilter))
    For i = 0 To UBound(FileFilter)
        n = Split(FileFilter(i), ";")
            lst(i) = n(0)
    Next i
    FileDialogFilter = lst
End Property

Public Function ListFileType(FileTypeIndex As Integer) As Variant
Dim lst() As String, n As Variant, i As Byte
    n = Split(FileDialogFilter(FileTypeIndex), ";")
    n = Split(n(1), ",")
    For i = 0 To UBound(n)
            lst(i) = n(i)
    Next i
    ListFileType = lst
End Function
Имя эти 3 свойства и функции можно создать гибкий фильтр для настройки диалогового окна Application.FileDialog(msoFileDialo gFilePicker)
Например создадим на форме 2 элемента ComboBox1 и ComboBox2
ComboBox1 список Типов файлов
ComboBox2 список Расширений файлов выбранного типа
В процедуре иницилизации формы вставим код, не забыв в начале модуля формы объявить переменную Public FileDialog As FileDialog
Код:
Private Sub UserForm_Initialize()
    Set Me.FileDialog = Application.FileDialog(msoFileDialogFilePicker)
    Me.ComboBox2.Clear
    Me.ComboBox1.List = FileType
    Me.ComboBox1.ListIndex = 0
End Sub
Теперь свяжем ComboBox1 и ComboBox2
Код:
Private Sub ComboBox1_Change()
    Me.ComboBox2.Clear
    Me.ComboBox2.List = ListFileType(ComboBox1.ListIndex)
End Sub
Далее связываем ComboBox1 и ComboBox1 с фильтром окна Me.FileDialog
Код:
Private Sub ComboBox2_Change()
    Me.FileDialog.Filters.Clear
    Me.FileDialog.Filters.Add Me.ComboBox1, Me.ComboBox2
End Sub
Теперь допустим мы хотим добавить в список фильтров файлы Access
Для этого в свойство Public Property Get FileDialogFilter достаточно вставить строку lst(4) = "Файлы Access;*.accdb,*.mdb,*.adp,*.mda,*. accda,*.mde,*.accde,*.ade"
Код:
Public Property Get FileDialogFilter() As Variant
Dim lst(0 To 4) As String
    lst(0) = "Все файлы;*.*"
    lst(1) = "Файлы Word;*.docx,*.docm,*.dotx,*.dotm,*.doc,*.dot,*.htm,*.html,*.rtf,*.mht,*.mhtml,*.xml,*.odt"
    lst(2) = "Файлы Excel;*.xl,*.xlsx,*.xlsm,*.xlsb,*.xlam,*.xltx,*.xltm,*.xls,*.xlt,*.htm,*.html,*.mht,*.mhtml,*.xml,*.xla,*.xlm,*.xlw,*.odc,*.uxdc,*.ods"
    lst(3) = "Файлы PowerPoint;*.pptx,*.ppt,*.pptm,*.ppsx,*.pps,*.ppsm,*.potx,*.pot,*.potm,*.odp"
    lst(4) = "Файлы Access;*.accdb,*.mdb,*.adp,*.mda,*.accda,*.mde,*.accde,*.ade"
    FileDialogFilter = lst
End Property
И при новой иницилизации список ComboBox1 обновится и соответственно ComboBox2 будет показывать расширения Access
Ладно уже поздно, а у меня сегодня ДР, поэтому если интересен раскрытый мною вопрос напишите, я расскажу как еще улучшить фильтрацию и как изменять автоматически код в FileDialogFilter, чтобы во время выполнения программы добавлялись, удалялись и сохранялись фильтры, а также сохранялись предыдущие пути к файлам
Пименов Александр вне форума Ответить с цитированием
Старый 18.01.2012, 11:06   #19
@лeся
Пользователь
 
Аватар для @лeся
 
Регистрация: 04.01.2012
Сообщений: 44
По умолчанию

Александр, с Прошедшим ДР Всего наиприятнейшего в новом году ) .



А по коду, спасибо,буду эксперементировать.

п.с. про фильтрацию не помешает,правда мне пока не до таких "красивостей",хочется уж доделать основную цель,а далее приняться за "украшения"

п.п.с. в течение дня думаю возникнут вопросы )
@лeся вне форума Ответить с цитированием
Старый 18.01.2012, 11:40   #20
Пименов Александр
Форумчанин
 
Регистрация: 17.11.2010
Сообщений: 222
По умолчанию

Хорошо, пишите.......
Пименов Александр вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
makefile: поменять имена файлов как? chechestor Общие вопросы C/C++ 1 14.01.2011 17:02
Как задать команду загрузки файлов данных на кнопку если каталог и имена файлов известны??? Andbuba Microsoft Office Excel 2 28.12.2008 17:28
Как вывести на экран имена файлов текущего каталога? (С++) Darw1n Помощь студентам 1 13.12.2008 11:10
Как получить имена нескольких файлов выделенных в OpenDialog Comer_Jus Общие вопросы Delphi 2 26.05.2008 19:47
как считать имена файлов из директории и поддерикторий в массив, ХЭЛП uraveselov Microsoft Office Excel 2 10.04.2008 09:50