Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Еще раз про список файлов в ListBox'e

248
18 декабря 2007 года
Dmitry2064
590 / / 06.12.2006
Большая просьба еще раз помочь заполнить ListBox. (Попытался разобрать предоставленный Pashulk'ой примером Excel_Timer_ListBox.xls [от 2 декабря http://forum.codenet.ru/showthread.php?t=43649 - только сейчас добрался до этого], но... 1) не смог избавиться от одного из двух окон со списком, 2) не смог подписать вызов Ворда для обработки дока и 3) не смог перенести код в свою книгу - пишет, что объект не существует, даже если рисовать ListBox или ComboBox руками, запутался, что чего вызывает и что где проверяется + на квардатных скобках пишет RunTime 1004 App or Obj Defined err - вобщем за 3,5 часа разобраться с примером не смог).
Поэтому начал от печки.
Сначала так:
 
Код:
Sub FList()
With ListBox1 'предварительно нарисовал этот ListBox на листе Екселя из-под "конструктора"
'.List = Array(0, 0, 0, 0) 'просто менял комменты на каждой строке
и смотрел, будет ли что-то меняться
.List = Array(1, 2, 3, 4, 5, 6, 7, 8)
.ListIndex = 0
End With
End Sub
и в поле со списком появились цифирки ("оно" работает, уже хорошо).
Теперь хочу, чтобы появились названия файлов (взял за основу пример из самоучителя Гарнаева по VBA для Екселя):
Код:
Sub FList()
Dim iPapka As String
Dim FName As String
Dim MyPath As Integer
 iPapka = "c:\123\456\"
 MyPath = Len(iPapka)
 
 ListBox1.Clear 'очистил список, чтобы не повторялись названия

 With Application.FileSearch
 .Filename = "*.doc"
 .SearchSubFolders = False
 If .Execute(SortBy:=msoSortByFileName, sortorder:=msoSortOrderAscending) > 0 Then
 For i = 1 To .FoundFiles.Count
 FName = Right(.FoundFiles(i), Len(.FoundFiles(i)) - MyPath - 1)
'отрезаю полный путь, чтобы осталось лишь название файла
 ListBox1.AddItem FName
 Next i
 End If
 End With
End Sub

Но теперь:
1. Показывается список файлов из Мои документы, а не из указанной папки - оказалось, надо написать .LookIn = iPapka
2. Не отрезается путь от имени файла в списке. - исправилось.
3. Периодически обновлять список не надо, т.к. предполагаю просто запускать эту процедуру (наполнение LstBox'a) при окончании обработки любого файла другой процедурой). Т.е. похоже, что необходимость в инструкции On_Time отпадает.
4. Можно ли подсказать, как написать вызов документа для обработки Вордом щелчком на этом доке в ListBox'e?
275
18 декабря 2007 года
pashulka
985 / / 19.09.2004
Код:
Private Const iPath$ = "C:\123\456\"

Private Sub GetDocuments()
   If Dir(iPath$, vbDirectory) = "" Then
      MsgBox "Укажите существующую папку", , iPath$
      Exit Sub
   End If
   Me.ListBox1.Clear
   With Application.FileSearch
        .NewSearch
        .LookIn = iPath$
        '.SearchSubFolders = False
        .FileName = "*.doc"
        .FileType = msoFileTypeWordDocuments
        .Execute
        For iCount& = 1 To .FoundFiles.Count
            Me.ListBox1.AddItem Dir(.FoundFiles(iCount&))
        Next
    End With
End Sub

Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    If MsgBox("Вы хотите открыть документ " & _
       Me.ListBox1.Value & " ?", vbYesNo, "") = vbYes Then
       iFileName$ = iPath$ & Me.ListBox1.Value
       If Dir(iFileName$, 3) <> "" Then
          With CreateObject("Word.Application")
               .Visible = True
               .Documents.Open FileName:=iFileName$
          End With
       Else
          MsgBox "Документ, видимо, изволит отсутствовать", , iFileName$
       End If
    End If
End Sub
248
18 декабря 2007 года
Dmitry2064
590 / / 06.12.2006
Все здорово за исключением того, что док почему-тоне открывается (пишется "изволит отсутствовать"), хотя присутствует, это точно ;-). Я попробую через Shell (странно, но до вашей подсказки это в голову не пришло - хотя может тоже не сработает).

Большое спасибо.

P.S.
Через Shell Ворд ругается:
[COLOR="DarkRed"]Ошибка при попытке открытия файла.
Попробуйте следующее:
1. проверьте разрешение на доступ
2. достаточно ли памяти и места на диске
3. Откройте файл с пом. конвертера резервных копий.
[/COLOR](через проводник, ессно, открывается без запинки, а вот из под Екселя... (кстати, поэтому же видимо и с CreateObject в вашем варианте тоже не открывался документ.
275
18 декабря 2007 года
pashulka
985 / / 19.09.2004
Посмотрите - не ищите ли Вы "случайно" файлы в подпапках, т.е. .SearchSubFolders = True, затем проверьте наличие слэша в конце пути "C:\123\456\"
248
18 декабря 2007 года
Dmitry2064
590 / / 06.12.2006
Цитата: pashulka
Посмотрите - не ищите ли Вы "случайно" файлы в подпапках, т.е. .SearchSubFolders = True, затем проверьте наличие слэша в конце пути "C:\123\456\"



Нашел. К имени файла надо было добавлять полный путь.

Код:
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
iPath$ = "C:\123\" 'я забыл про эту строчку (сначала ее не написал)
    If MsgBox("Вы хотите открыть документ " & _
       Me.ListBox1.Value & " ?", vbYesNo, "") = vbYes Then
       iFileName$ = iPath$ & Me.ListBox1.Value
       If Dir(iFileName$, 1) <> "" Then
          With CreateObject("Word.Application")
               .Visible = True
               .Documents.Open Filename:=iFileName$
          End With
       Else
          MsgBox "Документ, видимо, изволит отсутствовать", , iFileName$
       End If
    End If
End Sub


Тогда такой вопросик. Как бы не открывать новую копию Ворда, а то их становится все больше и больше?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог