Страница 1 из 1

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

Добавлено: 27 мар 2009, 12:23
russian imigration
в 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

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

Добавлено: 27 мар 2009, 13:17
Aent
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.