【问题标题】:How to create dynamic object list with files properties in excel in VBA如何在 VBA 中的 excel 中创建具有文件属性的动态对象列表
【发布时间】:2019-04-08 08:22:17
【问题描述】:

我在 Excel 2016 中为个人项目创建了文档列表,它可以对文件进行排序并删除旧版本,创建指向新版本的可点击链接... 我想更新代码以获得更好的可靠性和可见性。

我不知道如何创建具有文件属性(大小、名称、路径、创建日期...)的对象的动态列表,例如:具有这些属性(大小、名称、路径...) 我添加了一段我的旧代码。

我尝试了这些教程,但没有用或者我不明白:

Dim TblFichiers() As String
Dim File As String
Dim I As Integer

If Right(Chemin, Len(Chemin)) <> "\" Then Chemin = Chemin & "\"
File = Dir(Chemin & "*" & Ext & "*")

Do While (Len(File ) > 0)
    I = I + 1
    ReDim Preserve TblFichiers(1 To I)
    TblFichiers(I) = File 
    File = Dir()
Loop

Getfiles= TblFichiers() 'Getfiles is main function

我知道如何在 C++ 或 C# 中执行此操作,但我很难理解它在 VBA 中的工作原理。

【问题讨论】:

  • 你需要定义一个类来分组你想要记录的变量。您需要为每条记录创建该类的新实例。将记录添加到 Collection 或 Scripting.Dictionary。脚本字典为集合提供了许多优势。
  • 相对于文件的“权重”是什么?该属性代表什么?你是说尺寸吗?
  • @Skin 是的,它的大小,对不起,我的英语不太好

标签: excel vba file


【解决方案1】:

我认为你最好看看 Microsoft Scripting Runtime 库..

Public Sub TraverseFiles()
    Dim strFolder As String

    Dim objFSO As Scripting.FileSystemObject
    Dim objFolder As Scripting.Folder
    Dim objFile As Scripting.File

    strFolder = "c:\temp"

    Set objFSO = New Scripting.FileSystemObject
    Set objFolder = objFSO.GetFolder(strFolder)

    For Each objFile In objFolder.Files
        Debug.Print objFile.Name
        Debug.Print objFile.Path
        Debug.Print objFile.Size
        Debug.Print objFile.DateCreated
    Next
End Sub

...它将为您提供有关文件属性和管理这些文件的操作的所需信息。

你只需要适应你的项目。

我希望这对你有用。

【讨论】:

  • 谢谢!我有最后一个问题:如何访问每个文件的属性,例如:"MsgBox objFolder.Files.Item(0).Path" without For Each?
  • @Bensuperpc,使用 for 循环效果不太好。由于某种原因,使用集合中文件的索引会产生错误,这显然只是微软编写库的方式。如果您需要某种索引,只需在每个循环中增加一个变量,这有帮助吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-05
  • 2021-06-26
  • 1970-01-01
  • 1970-01-01
  • 2011-09-29
相关资源
最近更新 更多