как выбрать путь на папку?

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
russian imigration
Сообщения: 34
Зарегистрирован: 02 май 2006, 08:31
Контактная информация:

в VB умею делать кнопку, чтобы потом указать путь на отдельный файл. потом эти пути забиваю в массив и работаю с файлами.
а можно ли указать путь лишь на папку (как?) и потом сделать так, чтобы просто все текстовые (*.txt) файлы забивались в массив?
а то, когда много файлов, то это занимает достаточно много времени :(

вот что было до этого:

Код: Выделить всё

Dim dname() As String  'путь к файлу датчика
ReDim dname(nd)   'задается размерность массива для количества датчиков

Private Sub CommandButton1_Click() 'кнопка [...] для задания путей на файлы
Dim FileToOpen
  
  FileToOpen = Application.GetOpenFilename("Text Files (*.txt), *.txt") 'открытие файла *.txt
  If FileToOpen <> False Then
    TextBox1.Text = FileToOpen
    dname(ComboBox2.Value) = FileToOpen
  End If
End Sub
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

1) l VBA Select Folder
http://www.your-save-time-and-improve-q ... folder.htm
2) Для одного своего проекта я лет 5 назад написал:

Код: Выделить всё

Public Function GetArray(sPath as String) As String()
    Dim s As String, e As String
    Dim i As Integer, j As Integer
    ReDim da(0 To 10000) As String
    s = Dir(sPath + "\*.txt", vbReadOnly)    ' Retrieve the first entry.
    If Len(s) = 0 Then
        ReDim da(0)
        da(0) = vbNullString
        GetArray = da
        Exit Function
    End If
    i = 0
    Do While Len(s) > 0
        If s <> "Normal.dot" Then
            e = Left(s, Len(s) - 4)
            If i = 0 Then
                da(i) = e: i = i + 1
            Else
                For j = i - 1 To 0 Step -1
                    If da(j) < e Then
                        Exit For
                    Else
                        da(j + 1) = da(j)
                    End If
                Next j
                da(j + 1) = e: i = i + 1
            End If
        End If
        s = Dir
    Loop
    ReDim Preserve da(i)
    GetArray = da
End Function
Функция возвращает отсортированный массив имён .txt файлов
Если сортировка не нужна -просто воспользуйтесь Dir в цикле
Обратите внимание: в приведённой функции предполагается что файлов не больше 10000.
Андрей Энтелис,
aentelis.livejournal.com
Ответить