检查每个检查excel文件中的现有工作表

马克斯·克罗曼

此宏中的函数检查仅打开了用于存在工作表“经济”的excel,但是我需要检查每个Excel文件中是否存在该工作表,请检查文件夹和子文件夹。我该如何编辑它来检查不是当前宏Excel文件中的工作表名称,而是我在子“ ListFilesInFolder”中打开的所有文件中的工作表名称?

Sub MainList()
Set folder = Application.FileDialog(msoFileDialogFolderPicker)
If folder.Show <> -1 Then Exit Sub
xDir = folder.SelectedItems(1)
Call ListFilesInFolder(xDir, True)
End Sub
Function WorksheetExists(shtName As String, Optional wb As Workbook) As Boolean
    Dim sht As Worksheet
    If wb Is Nothing Then Set wb = ThisWorkbook
    On Error Resume Next
    Set sht = wb.Sheets(shtName)
    On Error GoTo 0
    WorksheetExists = Not sht Is Nothing
End Function
Sub ListFilesInFolder(ByVal xFolderName As String, ByVal xIsSubfolders As Boolean)
Dim xFileSystemObject As Object
Dim xFolder As Object
Dim xSubFolder As Object
Dim xFile As Object
Dim rowIndex As Long
Set xFileSystemObject = CreateObject("Scripting.FileSystemObject")
Set xFolder = xFileSystemObject.GetFolder(xFolderName)
rowIndex = Application.ActiveSheet.Range("A65536").End(xlUp).Row + 1
For Each xFile In xFolder.Files

If WorksheetExists("economy") = True Then
    Application.ActiveSheet.Cells(rowIndex, 1).Formula = xFile.Name
    Application.ActiveSheet.Cells(rowIndex, 2).Formula = xFile.Path
    Application.ActiveSheet.Cells(rowIndex, 3).Formula = "Есть"

Else
    Application.ActiveSheet.Cells(rowIndex, 1).Formula = xFile.Name
    Application.ActiveSheet.Cells(rowIndex, 2).Formula = xFile.Path
    Application.ActiveSheet.Cells(rowIndex, 3).Formula = "Нет"
    rowIndex = rowIndex + 1
End If
Next xFile
If xIsSubfolders Then
  For Each xSubFolder In xFolder.SubFolders
    ListFilesInFolder xSubFolder.Path, True
  Next xSubFolder
End If
Set xFile = Nothing
Set xFolder = Nothing
Set xFileSystemObject = Nothing
End Sub
Function GetFileOwner(ByVal xPath As String, ByVal xName As String)
Dim xFolder As Object
Dim xFolderItem As Object
Dim xShell As Object
xName = StrConv(xName, vbUnicode)
xPath = StrConv(xPath, vbUnicode)
Set xShell = CreateObject("Shell.Application")
Set xFolder = xShell.Namespace(StrConv(xPath, vbFromUnicode))
If Not xFolder Is Nothing Then
  Set xFolderItem = xFolder.ParseName(StrConv(xName, vbFromUnicode))
End If
If Not xFolderItem Is Nothing Then
  GetFileOwner = xFolder.GetDetailsOf(xFolderItem, 8)
Else
  GetFileOwner = ""
End If
Set xShell = Nothing
Set xFolder = Nothing
Set xFolderItem = Nothing
End Function

谢谢

斯托拉克斯

我建议使用,Option explicit但留给您使用。我这样调整你的代码

Sub ListFilesInFolder(ByVal xFolderName As String, ByVal xIsSubfolders As Boolean)
    Dim xFileSystemObject As Object
    Dim xFolder As Object
    Dim xSubFolder As Object
    Dim xFile As Object
    Dim rowIndex As Long
    Set xFileSystemObject = CreateObject("Scripting.FileSystemObject")
    Set xFolder = xFileSystemObject.GetFolder(xFolderName)
    rowIndex = Application.ActiveSheet.Range("A65536").End(xlUp).Row + 1
    For Each xFile In xFolder.Files
        If HasSheet(xFile.ParentFolder & "\", xFile.Name, "economy") Then
            Application.ActiveSheet.Cells(rowIndex, 1).Formula = xFile.Name
            Application.ActiveSheet.Cells(rowIndex, 2).Formula = xFile.path
            Application.ActiveSheet.Cells(rowIndex, 3).Formula = "Sheet exists"
        Else
            Application.ActiveSheet.Cells(rowIndex, 1).Formula = xFile.Name
            Application.ActiveSheet.Cells(rowIndex, 2).Formula = xFile.path
            Application.ActiveSheet.Cells(rowIndex, 3).Formula = "Sheet does not exist"
        End If
        rowIndex = rowIndex + 1
    Next xFile
    If xIsSubfolders Then
        For Each xSubFolder In xFolder.SubFolders
            ListFilesInFolder xSubFolder.path, True
        Next xSubFolder
    End If
    Set xFile = Nothing
    Set xFolder = Nothing
    Set xFileSystemObject = Nothing
End Sub

请注意,我将该行rowIndex = rowIndex + 1移出了if条件,并使用了另一个函数来检查所涉及的工作簿是否包含您要查找的工作表。原因是我要避免打开工作簿Workbooks.open,否则可能会在Auto_open代码运行时导致麻烦

这是HasSheet我使用的功能

Function HasSheet(fPath As String, fName As String, sheetName As String) As Boolean

    Dim f As String
    Dim res As Variant

    On Error GoTo EH

    f = "'" & fPath & "[" & fName & "]" & sheetName & "'!R1C1"

    res = ExecuteExcel4Macro(f)

    If IsError(res) Then
        HasSheet = False
    Else
        HasSheet = True
    End If

    Exit Function

EH:
    HasSheet = False

End Function

功能HasSheet基于此答案

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何检查数据库表中的现有行

来自分类常见问题

如何使用Pandas将新工作表保存在现有的Excel文件中?

来自分类Dev

如何使用EPPlus将新工作表添加到现有的Excel文件中?

来自分类Dev

为什么 openpyxl 无法识别我打开的现有 Excel 文件中的工作表名称?

来自分类Dev

如何检查Excel工作表上是否有表格

来自分类Dev

使用输入框添加新工作表,检查现有工作表名称和无效的工作表名称

来自分类Dev

使用输入框添加新工作表,检查现有工作表名称和无效的工作表名称

来自分类Dev

想检查是否有与文件同名的工作表

来自分类Dev

在Excel中跨多个工作表进行拼写检查

来自分类Dev

如何锁定现有Excel工作表中的特定列?

来自分类Dev

Pandas- 在文件夹中附加 Excel 文件,但也附加每个工作表,因此输出文件具有每个附加工作表

来自分类Dev

检查工作表中是否有任何公式

来自分类Dev

Excel VBA宏-从现有文件中的多个工作表中复制数据,并创建新文件并将所选数据粘贴到单独的工作表中

来自分类Dev

使用PowerShell将文本文件中的文本插入到现有Excel工作表中

来自分类Dev

检查文件夹是否存在并将两个工作表保存在VBA Excel中

来自分类Dev

如何使用 Pandas 将我的 python 网页抓取数据导出到现有 excel 文件中的特定工作表?

来自分类Dev

检查Java中的某些现有对象

来自分类Dev

如何使用R中的Openxlsx包修改Excel工作簿中的现有工作表?

来自分类Dev

将工作表添加到现有的Excel工作表中而不删除其他工作表

来自分类Dev

检查现有的cookie不能正常工作

来自分类Dev

VBA将每个工作表中的非空白单元格复制到现有工作表

来自分类Dev

选择查询检查的行多于表中现有的行

来自分类Dev

选择查询检查的行多于表中现有的行

来自分类Dev

将SQL表输出到现有的Excel文件/ SSIS中的新工作表/脚本任务中的C#

来自分类Dev

如何让 Pandas Excel writer 附加到工作簿中的现有工作表而不是创建新工作表?

来自分类Dev

将工作簿合并到主工作簿中,每个文件都有单独的工作表

来自分类Dev

将工作簿合并到主工作簿中,每个文件都有单独的工作表

来自分类Dev

将CSV文件保存到现有文件中,但保存在新工作表中,然后重命名工作表

来自分类Dev

如何在整个 Excel 工作表中检查公式中的特定文本?

Related 相关文章

  1. 1

    如何检查数据库表中的现有行

  2. 2

    如何使用Pandas将新工作表保存在现有的Excel文件中?

  3. 3

    如何使用EPPlus将新工作表添加到现有的Excel文件中?

  4. 4

    为什么 openpyxl 无法识别我打开的现有 Excel 文件中的工作表名称?

  5. 5

    如何检查Excel工作表上是否有表格

  6. 6

    使用输入框添加新工作表,检查现有工作表名称和无效的工作表名称

  7. 7

    使用输入框添加新工作表,检查现有工作表名称和无效的工作表名称

  8. 8

    想检查是否有与文件同名的工作表

  9. 9

    在Excel中跨多个工作表进行拼写检查

  10. 10

    如何锁定现有Excel工作表中的特定列?

  11. 11

    Pandas- 在文件夹中附加 Excel 文件,但也附加每个工作表,因此输出文件具有每个附加工作表

  12. 12

    检查工作表中是否有任何公式

  13. 13

    Excel VBA宏-从现有文件中的多个工作表中复制数据,并创建新文件并将所选数据粘贴到单独的工作表中

  14. 14

    使用PowerShell将文本文件中的文本插入到现有Excel工作表中

  15. 15

    检查文件夹是否存在并将两个工作表保存在VBA Excel中

  16. 16

    如何使用 Pandas 将我的 python 网页抓取数据导出到现有 excel 文件中的特定工作表?

  17. 17

    检查Java中的某些现有对象

  18. 18

    如何使用R中的Openxlsx包修改Excel工作簿中的现有工作表?

  19. 19

    将工作表添加到现有的Excel工作表中而不删除其他工作表

  20. 20

    检查现有的cookie不能正常工作

  21. 21

    VBA将每个工作表中的非空白单元格复制到现有工作表

  22. 22

    选择查询检查的行多于表中现有的行

  23. 23

    选择查询检查的行多于表中现有的行

  24. 24

    将SQL表输出到现有的Excel文件/ SSIS中的新工作表/脚本任务中的C#

  25. 25

    如何让 Pandas Excel writer 附加到工作簿中的现有工作表而不是创建新工作表?

  26. 26

    将工作簿合并到主工作簿中,每个文件都有单独的工作表

  27. 27

    将工作簿合并到主工作簿中,每个文件都有单独的工作表

  28. 28

    将CSV文件保存到现有文件中,但保存在新工作表中,然后重命名工作表

  29. 29

    如何在整个 Excel 工作表中检查公式中的特定文本?

热门标签

归档