Случайный выбор файла? - PullRequest
       18

Случайный выбор файла?

0 голосов
/ 25 апреля 2019

Прошло много лет с тех пор, как я использовал Visual Basic. Я понизил рейтинг с 2017 до 2010 (версия, которую я использовал, когда я учился в школе) . Я подумал, что VB будет лучшим способом попытаться найти решение. (хотя я уверен, что есть и другие языки, которые бы это делали.)

Я хочу вернуться к программированию. Позвольте мне добраться до проблемы.

У моего друга постоянно увеличивается количество текстовых документов в папке, и он хочет, чтобы программа выбрала один из них наугад и открыла его.

Я думал, что поставлю TextBox с кнопкой, которая позволит ему открыть папку, в которой он хранит свои файлы. Затем эта программа считывает количество текстовых файлов в этой папке и случайным образом генерирует число от одного до этого числа, выбирает и открывает документ с программой по умолчанию (если это текст, блокнот; если это DocX, то слово.)

Я уже 45 минут сижу у мигающего курсора. Я пошел на YouTube за помощью в этом проекте.

Любой совет или помощь, ребята, можете дать мне? Это нужно упростить?

Ответы [ 2 ]

1 голос
/ 25 апреля 2019

Это звучит как разумная стратегия для меня.

Возможно, стоило бы показать пользователю какой-то прогресс, скажем, поместив имя текущего имени файла, читаемого в строку состояния, на случай, если чтение имен файлов происходит с большой задержкой из-за большого количества файлов в папка и / или медленно работающий сетевой диск. Если вы сделаете это, не забудьте добавить DoEvents в ваш цикл, чтобы отображать обновления экрана.

Есть отдельная ветка о том, как открывать файлы в их родном обработчике здесь .

Надеюсь, это поможет - удачи!

0 голосов
/ 25 апреля 2019
Option Explicit
Public oFSO As Object
Public arrFiles()
Public lngFiles As Long
Sub Main()
    Dim sPath As String
    sPath = InputBox("Enter folder path", "Folder path")
    ' clear starting point
    lngFiles = 0
    Erase arrFiles

    Set oFSO = CreateObject("Scripting.FileSystemObject")
    Call recurse(sPath)

    Randomize
    Dim lngRandomFileNumber As Long
    lngRandomFileNumber = CLng(lngFiles * Rnd) + 1

    MsgBox "This is random file, that will be opened: " & arrFiles(lngRandomFileNumber)
    Call CreateObject("Shell.Application").Open(arrFiles(lngRandomFileNumber))
End Sub
Sub recurse(sPath As String)
    Dim oFolder As Object
    Dim oSubFolder As Object
    Dim oFile As Object

    Set oFolder = oFSO.GetFolder(sPath)

    'Collect file information
    For Each oFile In oFolder.Files
        lngFiles = lngFiles + 1
        ReDim Preserve arrFiles(lngFiles + 1)
        arrFiles(lngFiles) = sPath & "\" & oFile.Name

    Next oFile

    'looking for all subfolders
    For Each oSubFolder In oFolder.SubFolders
    'recursive call
    Call recurse(oSubFolder.path)
    Next oSubFolder
End Sub

Вы можете вставить этот код в любое приложение, поддерживающее VBA (MS Access, MS Excel, MS Word), вызвать редактор VBA (Shift + F11) и вставить этот код.После этого нажмите F5 и выберите функцию Main ().Вы увидите приглашение ввести путь к папке, и после этого вы получите случайный путь к файлу.

Я думаю, на практике должно быть понятно, что программа делает

Обновлено: @Belladonna упомянутэто ясно, чтобы открыть файл в программе по умолчанию.

NB: этот код также проходит через подпапки, если вы хотите исключить подпапки, вы должны закомментировать блок рекурсивного вызова в функции рекурсии

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...