【问题标题】:Random File Selector?随机文件选择器?
【发布时间】:2019-04-25 20:24:03
【问题描述】:

我已经有好几年没有使用 Visual Basic 了。我从 2017 年降级到 2010 年(我在学校时使用的版本)。我认为 VB 将是尝试解决方案的最佳方式。 (虽然我确信还有其他语言可以做到这一点。)

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

我的朋友在一个文件夹中的文本文档数量不断增加,他想要一个程序随机选择一个并打开它。

我想我应该放一个带按钮的文本框,让他打开存储文件的文件夹。然后该程序将读取该文件夹中的文本文件的数量,并随机生成一个介于 1 和该数字之间的数字,选择并使用其默认程序打开文档(如果是文本,则为记事本;如果是 DocX,则为 word。)

我已经坐在一个闪烁的光标前 45 分钟了。我已经在 YouTube 上寻求有关此项目的帮助。

你们可以给我任何建议或帮助吗?这需要简化吗?

【问题讨论】:

    标签: vba


    【解决方案1】:

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

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

    关于如何在其原生处理程序 here 中打开文件有一个单独的线程。

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

    【讨论】:

      【解决方案2】:
      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 明确提到,在默认程序中打开文件。

      注意:这段代码也是通过子文件夹传递的,如果你想排除子文件夹,你应该在recurce函数中注释递归调用块

      【讨论】:

        猜你喜欢
        • 2020-04-25
        • 1970-01-01
        • 2014-07-29
        • 2017-01-25
        • 2011-02-20
        • 2012-03-03
        • 2017-03-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多