自从我使用Visual Basic已经有好几年了。我从2017年降级为(我在学校时使用的版本)。我认为VB是尝试解决方案的最佳方法。 (尽管我确定还有其他语言也可以这样做。)
我希望重新开始编程。让我解决问题。
我的朋友一个文件夹中的文本文档越来越多,他希望程序可以随机选择一个文档并将其打开。
我以为我会在TextBox上放一个Button,这样他就可以打开他存储文件的文件夹。然后,该程序将读取该文件夹中的文本文件数,并随机生成一个与该数字之间的数字,选择并使用其默认程序打开该文档(如果是文本,请使用记事本;如果是DocX,然后是单词)。 / p>
我坐在闪烁的光标上45分钟。我已经在YouTube上寻求该项目的帮助。
有什么建议或帮助你们可以给我吗?是否需要简化?
答案 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清楚地提到了它,以便在默认程序中打开文件。
注意:该代码也通过子文件夹传递,如果要排除子文件夹,则应在递归函数中注释递归调用块