VBA循环浏览具有特定文件名的文件夹中的文件

拉斯科夫斯基

我设法将这段代码缓慢地开发成可用的东西,但还没有完全实现。我是VBA的新手,到目前为止,以下代码执行以下操作:

  • 循环浏览文件夹中的工作簿
  • 从每个工作簿中复制某些单元格
  • 将这些单元格粘贴到具有按列组织的信息的行中
  • 从每个工作簿中复制一个范围
  • 将范围(14行数据)粘贴到每个工作簿中单个单元格形成的单行数据旁边(有效地将两半创建到工作表中-一半的每一行数据都属于某个工作簿(A:E列) ),另一半则每个14行的范围都属于某个工作簿(F:M列))

  • 仅当文件夹中的工作簿尚未循环时才执行上述所有操作(这是通过函数完成的)

    • 此函数查看由先前运行该代码创建的文件名列-这意味着每个循环工作簿的文件名都记录在该代码创建的列表中,并且该代码仅从工作簿中复制尚未包含文件名的数据在列表中。

我一直在努力并需要帮助的代码的下一个开发过程是添加了另一个条件-即使代码仅查看以前未循环的文件,并且也仅查看文件名结尾一定的文件。一组未循环的工作簿。

我如何实现此目的的逻辑是像循环函数一样添加另一个函数,并修改其中的代码以查看在单元格中输入的名称的前三个字符,然后将其查找/比较为尚未循环的文件名(文件名结尾(3个字符)始终是名称三个字符)。

这是主要的代码和功能:

Sub CopyFromFolderExample()

Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets(1)
Dim strFolder As String, strFile As String, r As Long, wb As Workbook
Dim varTemp(1 To 5) As Variant, r1 As Long, r3 As Range

Application.ScreenUpdating = False
strFolder = "D:\Other\folder\"
strFile = Dir(strFolder & "*.xl*")

Do While Len(strFile) > 0
    If Not Looped(strFile, ws) Then
        Application.StatusBar = "Reading data from " & strFile & "..."
        Set wb = Workbooks.Add(strFolder & strFile)
        With wb.Worksheets(1)
            varTemp(1) = strFile
            varTemp(2) = .Range("A13").Value
            varTemp(3) = .Range("H8").Value
            varTemp(4) = .Range("H9").Value
            varTemp(5) = .Range("H37").Value
            Set r3 = .Range("A20:H33")
        End With
        With ws
            r = .Range("A" & .Rows.Count).End(xlUp).Row + 1
            r1 = .Range("F" & .Rows.Count).End(xlUp).Row + 1 'last used row in col F
            .Range(.Cells(r, 1), .Cells(r, 5)).Value = varTemp
            .Cells(r1, 6).Resize(r3.Rows.Count, r3.Columns.Count).Value = r3.Value 'transfer A20:H33
        End With
        wb.Close False
    End If
  strFile = Dir
Loop

Application.StatusBar = False
Application.ScreenUpdating = True

End Sub

Private Function Looped(strFile As String, ws As Worksheet) As Boolean

    Dim Found As Range
    Set Found = ws.Range("A:A").Find(strFile)

    If Found Is Nothing Then
        Looped = False
    Else
        Looped = True
    End If

    End Function

这是我试图通过向IF代码中添加另一条语句来尝试使用的修改后的函数-未成功:

Private Function notx(strFile As String, ws As Worksheet) As Boolean

Dim Found As Range
Set Found = strFile.Find(Left(ws.Range("P1").Value, 3))

If Found Is Nothing Then
    notx = False
Else
    notx = True
End If

End Function
阿鲁尔

strFile是一个字符串,不能.Find在字符串中使用尝试将notx功能更改为以下内容:

Private Function notx(strFile As String, ws As Worksheet) As Boolean

Dim Found As Integer
Found = InStr(1, strFile, Left(ws.Range("P1").Value, 3))

If Found = 0 Then
    notx = False
Else
    notx = True
End If

End Function

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

循环浏览文件夹中的所有CSV文件

使用VBA循环浏览文件夹中的文件?

从资产文件夹获取仅具有.txt扩展名的文件的文件名

Shell:复制具有完整文件夹结构的文件列表,从文件名中剥离N个主要组件

如何删除父文件夹中具有与指定子文件夹相同文件名的所有文件?

如何遍历文件夹中的文件以移动具有特定扩展名的每个文件

Powershell脚本获取具有文件夹的文件名和文件大小的csv文件

使用Boost Filesystem C ++将具有特定扩展名的文件名保存在特定的文件夹中

递归列出具有文件名,文件夹名和权限的文件

从具有指定文件夹名称的文件夹结构中获取文件名

在Java中读取文件名的开头并创建具有该名称的文件夹

如何删除特定文件夹中具有特定扩展名的所有文件?

Shellscript循环浏览文件夹中的所有文件

使用C#将前缀添加到具有特定扩展名的文件夹中的所有文件名

VBA循环浏览文件夹中的所有文件并删除无效字符

循环浏览文件夹中的所有文件

如何从Andorid中的文件夹中删除具有特定扩展名的文件

C#代码从文件夹中的现有文件重命名具有今天日期的文件名

循环浏览文件名具有特定日期的文件上的文件夹

循环浏览许多文件夹,并对bash中具有相似模式的文件进行计算

循环浏览文件夹中具有不同文件扩展名的所有文件

从bash-scipt中具有相同文件名的不同文件夹中加载多个文件

如何在VBA中打开具有特定名称的文件夹中的文件?

在文件夹中搜索大量特定文件名

Windows 使用 FOR 循环为当前文件夹中具有 EXIF 值的文件名批量添加后缀

将文件从单个文件夹移动到具有文件名等名称的现有文件夹

如何遍历目录中的所有子文件夹,并删除具有特定文件名的文件

如何将具有相似文件名的文件移动到 Python 中的新文件夹中

如何将多个 tgz 文件提取到具有部分文件名的单独文件夹中?