随机文件选择器?

时间:2019-04-25 10:21:25

标签: vba

自从我使用Visual Basic已经有好几年了。我从2017年降级为(我在学校时使用的版本)。我认为VB是尝试解决方案的最佳方法。 (尽管我确定还有其他语言也可以这样做。)

我希望重新开始编程。让我解决问题。

我的朋友一个文件夹中的文本文档越来越多,他希望程序可以随机选择一个文档并将其打开。

我以为我会在TextBox上放一个Button,这样他就可以打开他存储文件的文件夹。然后,该程序将读取该文件夹中的文本文件数,并随机生成一个与该数字之间的数字,选择并使用其默认程序打开该文档(如果是文本,请使用记事本;如果是DocX,然后是单词)。 / p>

我坐在闪烁的光标上45分钟。我已经在YouTube上寻求该项目的帮助。

有什么建议或帮助你们可以给我吗?是否需要简化?

2 个答案:

答案 0 :(得分:1)

对我来说,这听起来像是一个合理的策略。

可能值得向用户显示某种进度,例如,将正在读取的当前文件名放在状态栏中,以防由于其中包含大量文件而导致读取文件的时间过长文件夹和/或运行缓慢的网络驱动器。如果这样做,请记住将DoEvents放入循环中以允许显示屏幕更新。

有一个单独的线程介绍如何在其本机处理程序here中打开文件。

希望这会有所帮助-祝你好运!

答案 1 :(得分:0)

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清楚地提到了它,以便在默认程序中打开文件。

注意:该代码也通过子文件夹传递,如果要排除子文件夹,则应在递归函数中注释递归调用块