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
Еще раз про список файлов в ListBox'e
http://forum.codenet.ru/showthread.php?t=43649 - только сейчас добрался до этого], но... 1) не смог избавиться от одного из двух окон со списком, 2) не смог подписать вызов Ворда для обработки дока и 3) не смог перенести код в свою книгу - пишет, что объект не существует, даже если рисовать ListBox или ComboBox руками, запутался, что чего вызывает и что где проверяется + на квардатных скобках пишет RunTime 1004 App or Obj Defined err - вобщем за 3,5 часа разобраться с примером не смог).
Поэтому начал от печки.
Сначала так:
и в поле со списком появились цифирки ("оно" работает, уже хорошо).
Теперь хочу, чтобы появились названия файлов (взял за основу пример из самоучителя Гарнаева по VBA для Екселя):
Но теперь:
1. Показывается список файлов из Мои документы, а не из указанной папки - оказалось, надо написать .LookIn = iPapka
2. Не отрезается путь от имени файла в списке. - исправилось.
3. Периодически обновлять список не надо, т.к. предполагаю просто запускать эту процедуру (наполнение LstBox'a) при окончании обработки любого файла другой процедурой). Т.е. похоже, что необходимость в инструкции On_Time отпадает.
4. Можно ли подсказать, как написать вызов документа для обработки Вордом щелчком на этом доке в ListBox'e?
Большая просьба еще раз помочь заполнить ListBox. (Попытался разобрать предоставленный Pashulk'ой примером Excel_Timer_ListBox.xls [от 2 декабря
Поэтому начал от печки.
Сначала так:
Код:
Теперь хочу, чтобы появились названия файлов (взял за основу пример из самоучителя Гарнаева по 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
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?
Код:
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
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
Большое спасибо.
P.S.
Через Shell Ворд ругается:
[COLOR="DarkRed"]Ошибка при попытке открытия файла.
Попробуйте следующее:
1. проверьте разрешение на доступ
2. достаточно ли памяти и места на диске
3. Откройте файл с пом. конвертера резервных копий.
[/COLOR](через проводник, ессно, открывается без запинки, а вот из под Екселя... (кстати, поэтому же видимо и с CreateObject в вашем варианте тоже не открывался документ.
Посмотрите - не ищите ли Вы "случайно" файлы в подпапках, т.е. .SearchSubFolders = True, затем проверьте наличие слэша в конце пути "C:\123\456\"
Цитата: 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
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
Тогда такой вопросик. Как бы не открывать новую копию Ворда, а то их становится все больше и больше?