自适应vba excel函数递归

2024-04-14

我无法将一个工作解决方案转换为递归解决方案,该解决方案将目录文件夹作为输入并将文件夹中文件容器的文件名和其他文件属性输出到 Excel 电子表格中,该解决方案还输出子文件夹中包含的文件。我将非常感谢任何帮助!

Sub GetFileList()

    Dim strFolder As String
    Dim varFileList As Variant
    Dim FSO As Object, myFile As Object
    Dim myResults As Variant
    Dim l As Long

    ' Get the directory from the user
    With Application.FileDialog(msoFileDialogFolderPicker)
        .Show
        If .SelectedItems.Count = 0 Then Exit Sub
        'user cancelled
        strFolder = .SelectedItems(1)
    End With

    ' Get a list of all the files in this directory. ' Note that this isn't recursive... although it could be...
    varFileList = fcnGetFileList(strFolder)

    If Not IsArray(varFileList) Then
        MsgBox "No files found.", vbInformation
        Exit Sub
    End If

    ' Now let's get all the details for these files ' and place them into an array so it's quick to dump to XL.
    ReDim myResults(0 To UBound(varFileList) + 1, 0 To 5)

    ' place make some headers in the array
    myResults(0, 0) = "Filename"
    myResults(0, 1) = "Size"
    myResults(0, 2) = "Created"
    myResults(0, 3) = "Modified"
    myResults(0, 4) = "Accessed"
    myResults(0, 5) = "Full path"

    Set FSO = CreateObject("Scripting.FileSystemObject")

    ' Loop through our files
    For l = 0 To UBound(varFileList)
        Set myFile = FSO.GetFile(CStr(varFileList(l)))
        myResults(l + 1, 0) = CStr(varFileList(l))
        myResults(l + 1, 1) = myFile.Size
        myResults(l + 1, 2) = myFile.DateCreated
        myResults(l + 1, 3) = myFile.DateLastModified
        myResults(l + 1, 4) = myFile.DateLastAccessed
        myResults(l + 1, 5) = myFile.Path
    Next l

    ' Dump these to a worksheet
    fcnDumpToWorksheet myResults

    'tidy up
    Set myFile = Nothing
    Set FSO = Nothing

End Sub

Private Function fcnGetFileList(ByVal strPath As String, Optional strFilter As String) As Variant ' Returns a one dimensional array with filenames ' Otherwise returns False

    Dim f As String
    Dim i As Integer
    Dim FileList() As String

    If strFilter = "" Then strFilter = "."

    Select Case Right$(strPath, 1)
        Case "\", "/"
            strPath = Left$(strPath, Len(strPath) - 1)
    End Select

    ReDim Preserve FileList(0)

    f = Dir$(strPath & "\" & strFilter)
    Do While Len(f) > 0
        ReDim Preserve FileList(i) As String
        FileList(i) = f
        i = i + 1
        f = Dir$()
    Loop

    If FileList(0) <> Empty Then
        fcnGetFileList = FileList
    Else
        fcnGetFileList = False
    End If
End Function

Private Sub fcnDumpToWorksheet(varData As Variant, Optional mySh As Worksheet)

    Dim iSheetsInNew As Integer
    Dim sh As Worksheet, wb As Workbook
    Dim myColumnHeaders() As String
    Dim l As Long, NoOfRows As Long

    If mySh Is Nothing Then
        'make a workbook if we didn't get a worksheet
        iSheetsInNew = Application.SheetsInNewWorkbook
        Application.SheetsInNewWorkbook = 1
        Set wb = Application.Workbooks.Add
        Application.SheetsInNewWorkbook = iSheetsInNew
        Set sh = wb.Sheets(1)
    Else
        Set mySh = sh
    End If

    With sh
        Range(.Cells(1, 1), .Cells(UBound(varData, 1) + 1, UBound(varData, 2) + 1)) = varData
        .UsedRange.Columns.AutoFit
    End With

    Set sh = Nothing
    Set wb = Nothing

End Sub

我重写了代码以将结果数组和计数器传递给递归函数。该函数填充数组并使用任何子文件夹调用自身

Sub GetFileList()

    Dim strFolder As String
    Dim FSO As Object
    Dim fsoFolder As Object
    Dim myResults As Variant
    Dim lCount As Long

    Set FSO = CreateObject("Scripting.FileSystemObject")

    ' Get the directory from the user
    With Application.FileDialog(msoFileDialogFolderPicker)
        .Show
        If .SelectedItems.Count = 0 Then Exit Sub
        'user cancelled
        strFolder = .SelectedItems(1)
    End With

    Set fsoFolder = FSO.GetFolder(strFolder)

    'the variable dimension has to be the second one
    ReDim myResults(0 To 5, 0 To 0)

    ' place make some headers in the array
    myResults(0, 0) = "Filename"
    myResults(1, 0) = "Size"
    myResults(2, 0) = "Created"
    myResults(3, 0) = "Modified"
    myResults(4, 0) = "Accessed"
    myResults(5, 0) = "Full path"

    'Send the folder to the recursive function
    FillFileList fsoFolder, myResults, lCount

    ' Dump these to a worksheet
    fcnDumpToWorksheet myResults

    'tidy up
    Set FSO = Nothing

End Sub

Private Sub FillFileList(fsoFolder As Object, ByRef myResults As Variant, ByRef lCount As Long, Optional strFilter As String)

    Dim i As Integer
    Dim fsoFile As Object
    Dim fsoSubFolder As Object
    Dim fsoSubFolders As Object

    'load the array with all the files
    For Each fsoFile In fsoFolder.Files
        lCount = lCount + 1
        ReDim Preserve myResults(0 To 5, 0 To lCount)
        myResults(0, lCount) = fsoFile.Name
        myResults(1, lCount) = fsoFile.Size
        myResults(2, lCount) = fsoFile.DateCreated
        myResults(3, lCount) = fsoFile.DateLastModified
        myResults(4, lCount) = fsoFile.DateLastAccessed
        myResults(5, lCount) = fsoFile.Path
    Next fsoFile

    'recursively call this function with any subfolders
    Set fsoSubFolders = fsoFolder.SubFolders

    For Each fsoSubFolder In fsoSubFolders
        FillFileList fsoSubFolder, myResults, lCount
    Next fsoSubFolder

End Sub

Private Sub fcnDumpToWorksheet(varData As Variant, Optional mySh As Worksheet)

    Dim iSheetsInNew As Integer
    Dim sh As Worksheet, wb As Workbook
    Dim myColumnHeaders() As String
    Dim l As Long, NoOfRows As Long

    If mySh Is Nothing Then
        'make a workbook if we didn't get a worksheet
        iSheetsInNew = Application.SheetsInNewWorkbook
        Application.SheetsInNewWorkbook = 1
        Set wb = Application.Workbooks.Add
        Application.SheetsInNewWorkbook = iSheetsInNew
        Set sh = wb.Sheets(1)
    Else
        Set mySh = sh
    End If

    'since we switched the array dimensions, have to transpose
    With sh
        Range(.Cells(1, 1), .Cells(UBound(varData, 2) + 1, UBound(varData, 1) + 1)) = _
            Application.WorksheetFunction.Transpose(varData)

        .UsedRange.Columns.AutoFit
    End With

    Set sh = Nothing
    Set wb = Nothing

End Sub
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自适应vba excel函数递归 的相关文章

  • 如何将 HTML 表格导出为 .xlsx 文件

    我有一个关于导出的问题HTML表格 as an xlsx文件 我做了一些工作 现在我可以将其导出为xls 但我需要将其导出为xlsx 这是我的 jsFiddle https jsfiddle net 272406sv 1 https jsf
  • 通过 PHP 检测 excel .xlsx 文件 mimetype

    我无法通过 PHP 检测 xlsx Excel 文件的 mimetype 因为它是 zip 存档 文件实用程序 file file xlsx file xlsx Zip archive data at least v2 0 to extra
  • 如何使用 Java Apache POI 隐藏 Excel 工作表中以下未使用的行?

    我正在使用数据库中的数据填充模板 Excel 工作表 for Map
  • 基于多个动态过滤条件过滤Excel范围

    我想过滤数据集 考虑几个可以根据可能值列表动态更改的过滤条件 我有过滤条件team其具有以下值 Team A Team B ALL 其中 ALL 是代表所有团队的通配符 对于第二个标准release 如果我想在过滤器中包含多个版本 则值之间
  • 在 VBA 中使用 getElementsByClassName

    我正在使用此代码从页面获取产品名称 页面代码是 div class product shop col sm 7 div class product name h1 Claro Glass 1 5 L Rectangular Air Tigh
  • 由于直接引用范围而不是通过中间变量而导致 Excel VBA 运行时错误 450

    当我尝试直接引用某个范围内的值时 出现运行时错误 450 但如果我使用中间变量 它就会起作用 我不明白为什么 所以我担心在将来的某个时候我会再次遇到错误而不知道为什么 我尝试过使用 With End With 块 但当我直接引用范围时它仍然
  • 将包含换行符的文本文件导入到 Excel 中

    我有一个纯文本文件 如下所示 some text containing line breaks 我正在尝试说话excel 2004 Mac v 11 5 正确打开此文件 我希望只看到一个单元格 A1 包含上述所有内容 不带引号 但可惜的是
  • 选择在 Excel 宏(VBA 中的范围对象)中具有值的列

    如何修改 VBA 中的这一行以仅选择具有值的列 Set rng Range A1 Range A65536 End xlUp SpecialCells xlCellTypeVisible 我不认为我做的事情是正确的CountLarge财产是
  • 如何在未安装 Office 的情况下以编程方式创建、读取、写入 Excel?

    我对所有读取 写入 创建 Excel 文件的方法感到非常困惑 VSTO OLEDB 等 但它们都seem具有必须安装office的要求 这是我的情况 我需要开发一个应用程序 它将以 Excel 文件作为输入 进行一些计算并创建一个新的 Ex
  • 如何使用 Excel Interop 获取筛选行的范围?

    我正在为我的项目使用 Excel Interop 程序集 如果我想使用自动过滤器 那么可以使用 sheet UsedRange AutoFilter 1 SheetNames 1 Microsoft Office Interop Excel
  • 使用一次递归调用实现递归

    给定一个函数如下 f n f n 1 f n 3 f n 4 f 0 1 f 1 2 f 2 3 f 3 4 我知道使用递归来实现它 并在一个函数内进行三个递归调用 但我想在函数内仅使用一次递归调用来完成此操作 怎样才能做到呢 要实现使用
  • Excel VBA 导出到文本文件。需要删除空行

    我有一个工作簿 使用以下脚本将其导出到文本文件 它工作正常 但是当我打开文本文件时 末尾总是有一个空行 这导致我在生成此文本文件后运行的另一个脚本出现问题 有关如何从导出中删除空行的任何帮助 Code Sub Rectangle1 Clic
  • 如何使用Matlab将数据保存到Excel表格中?

    我想将数据以表格形式保存在 Excel 工作表中 它应该看起来像 Name Age R no Gpa Adnan 24 18 3 55 Ahmad 22 12 3 44 Usman 23 22 3 00 每次当我执行我的文件时类数据 m 下
  • 在堆栈已满并给出分段错误之前,C/C++ 中的最大递归函数调用次数?

    我正在做一个问题 我使用递归函数来创建线段树 对于较大的值 它开始出现分段错误 所以我之前认为可能是因为数组索引值越界 但后来我认为这可能是因为程序堆栈太大 我编写这段代码是为了计算系统出现段错误之前允许的最大递归调用次数 include
  • 在 VBA 中循环合并单元格

    是否可以循环遍历合并的单元格vba questions tagged vba 我的范围内有 6 个合并单元格B4 B40 我只需要这 6 个单元格中的值 6 次迭代 上面的答案看起来已经让你排序了 如果您不知道合并的单元格在哪里 那么您可以
  • 如何在字符串vba中包含引号

    我想存储以下文本 Test1 Monday Test Abcdef 全部在字符串中包含引号 我知道要在字符串中包含引号 我必须包含 之前 但在这里这不是一个很好的解决方案 因为我在文本中有太多这样的解决方案 知道如何一次完成这一切吗 您有两
  • VBA根据单元格的值是否为零显示/隐藏行

    我有一个 Excel 工作表 我想根据另一个单元格中的值隐藏或取消隐藏某些行 简而言之 整个事情应该取决于单元格中的值C2 D2 E2 If C2 is blank我想rows 31 to 40被隐藏 如果是的话不为空 他们需要是visib
  • laravel中过滤后如何导出excel?

    我想仅导出视图刀片中过滤的数据 我正在使用 Laravel 7 和 maatwebsite excel 3 1 和 PHP 7 4 2 我浏览了文档并应用了这个 View a href class btn btn success i cla
  • 无法将 Excel 值的类型“double”转换为“string”

    我正在加载 Excel 文件 如网络上许多地方所示 OpenFileDialog chooseFile new OpenFileDialog chooseFile Filter Excel files xls xlsl xls xlsx i
  • 在Google电子表格中划分整列

    我是 Google 电子表格的一个相对较新的用户 我希望 B 列中的每个单元格都是 A 列 同一行 中内容除以 5 的结果 B1 B2 B3 等 商 应为 A1 A2 A3 等 被除数 除以 5 除数 在示例中 B1 A1 5 我知道一项一

随机推荐

  • Android 图像裁剪 Uri 异常

    首先 我使用的是 Xamarin 但问题在本机 Java 项目上是相同的 我正在将 SDK 更新到 5 1 并在之前运行良好的代码上遇到了一个奇怪的错误 imageStream file imageStream Mvx Trace path
  • 启动 minikube 时无法设置 kubeconfig

    我已经安装了kubectl and minikube在我的 Windows 环境中 但是运行时minikube 启动它在 virtualBox 上创建虚拟机 但当它尝试在 Docker 上准备 kubernetes 时出现此错误 C Use
  • 对 Int32 或 UInt32 中的位进行哈希处理的好方法是什么?

    我有一个伪随机数生成器的实现 特别是 George Marsaglia 的 XOR Shift RNG 我的实现在这里 FastRandom cs http sharpneat svn sourceforge net svnroot sha
  • Auth0 不会在页面刷新时保留电子邮件/密码的登录信息

    我使用 Auth0 作为使用 React 的 SPA 的身份验证提供程序 我已遵循Auth0 反应教程 https auth0 com docs quickstart spa react 01 login and 这个更详细的教程 http
  • 如何以编程方式评估托管 bean 中的 EL

    我想在基于 Seam JSF 的应用程序中添加一个简单的模板语言 让用户撰写自己的电子邮件 由于我不想创建新的解析器 因此我想使用统一表达语言自行设置上下文 我怎样才能做到这一点 如果您位于 JSF 上下文中 那么只需使用Applicati
  • 如何动态有效地应用 RTL

    每当我应用时 我都会在线性布局中动态创建和添加 TextViewlayoutAmount setRotationY 180 布局改变了方向 这是正确的 但是里面的 TextViews 的单词也改变了方向 这是错误的 例如 如果这个单词很抱歉
  • 用于代码分割的 Webpack 配置不适用于生产构建

    使用 Webpack 构建 ReactJS 应用程序 最近对使用代码分割来减少应用程序大小感兴趣 我尝试实现一个包装 System import 的自定义 HOC async index tsx at a very high level l
  • 为什么即使我在每个可能的点将其关闭后,我的代码仍会执行延迟加载?

    我想要获取具有 UserTest 实体的考试和测试实体 该实体的 UserId 等于 0 或等于提供的值 我提出了很多建议 但到目前为止都没有奏效 一个建议是从获取 UserTest 数据开始 另一种解决方案是从获取 Exam 数据开始 这
  • 如何检查我的 Node.js 服务器正在哪个 URL 中运行?

    我有两台服务器 db mydomain com 和 db2 mydomain com 用于开发 如何检查我的代码在哪个服务器上运行 我想从生产数据而不是开发数据中备份数据 关于如何做到这一点有什么想法吗 您可以在任何请求中获取主机名 app
  • 序列化模型中两列之间的总和

    如何使用sequelize 创建这样的查询 SELECT name region SUM COALESCE base income 0 COALESCE user taxes 0 AS total sal FROM user GROUP B
  • React Native 未启用可选链接

    在 React Native 中运行 Android 项目时出现此错误 这是反应本机版本 react 的全新安装 16 3 1 react native 0 57 1 它给出了可选链接的错误 任何人都可以帮助我如何在本机反应中启用可选链 L
  • 如何使用 AutoMapper 根据扁平化属性的名称查找源属性

    我正在使用 AutoMapper 我希望它根据映射 扁平化 目标属性的名称追溯源属性 这是因为我的 MVC 控制器具有映射属性的名称 它需要提供给用于排序目的的服务调用 服务需要知道映射源自的属性的名称 并且控制器不应该知道它 以便对实际对
  • 不能在此范围内声明名为“e”的本地或参数

    我正在尝试使用这段代码 var controls new txtName txtIdentityCard txtMobile1 foreach var control in controls Where e gt String IsNull
  • 垂直或水平合并单元格[重复]

    这个问题在这里已经有答案了 可能的重复 如何在 Adob e Flex 中合并 DataGrid Advanced DataGrid 中的单元格 https stackoverflow com questions 6910625 how t
  • 隐式参数在 unapply 时不起作用。如何从提取器中隐藏普遍存在的参数?

    显然 提取器对象中的 unapply unapplySeq 不支持隐式参数 假设这里有一个有趣的参数 a 以及一个令人不安的普遍存在的参数 b 在提取 c 时最好将其隐藏起来 EDIT 看来我的 intellij scala plugin
  • 如何在 React Native 应用程序中创建“评价此应用程序”链接?

    如何在 iOS 上的 React Native 应用程序中正确地将用户链接到 App Store 应用程序的评论页面 Use Linking https facebook github io react native docs linkin
  • html5/CSS/JS 的图像亮度

    在我的项目中 我试图创造一种环境照明的感觉 我通过客户端编码处理图像 并且需要调整多个图像的亮度 我知道有像 Pixastic 这样的库 但我想要一个直接应用于 HTML 代码 如标签 而不是 JS 中的 Image 对象的解决方案 有没有
  • 如何禁用系统托盘中的 VsHub.exe?

    启动 Visual Studio 2015 还会启动另外两个可执行文件 VSHub exe and Microsoft VsHub Server HttpHost exe 这两者都在任务管理器中占用了相当大的空间 如何删除这个 Visual
  • 界面设计的一些基本原则是什么? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在整理我的第一个真实界面的一些模型 我想知道 良好的用户界面设计的一些基本原则是什么 我正在寻找诸如项目符号列表摘要之类的东西 也
  • 自适应vba excel函数递归

    我无法将一个工作解决方案转换为递归解决方案 该解决方案将目录文件夹作为输入并将文件夹中文件容器的文件名和其他文件属性输出到 Excel 电子表格中 该解决方案还输出子文件夹中包含的文件 我将非常感谢任何帮助 Sub GetFileList