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

Arrays 是否要检查是否有与文件同名的工作表,arrays,excel,vba,loops,Arrays,Excel,Vba,Loops,要检查是否有与文件同名的工作表 目前,我已将文件作为数组打开,但希望它在代码中循环,并查看是否有同名的工作表 我已使用拆分来删除路径名和扩展名,但无法进行检查 我为代码的混乱道歉。我一直想把它整理好,然后我会把它整理好。有更多的代码,但这不是必需的,因为我希望它运行的代码,如果没有匹配 请问你能帮忙吗 Sub sort_it_out() Dim wb1 As Workbook Dim wb2 As Workbook Dim Sheet As Worksheet Dim filnam A

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

目前,我已将文件作为数组打开,但希望它在代码中循环,并查看是否有同名的工作表

我已使用拆分来删除路径名和扩展名,但无法进行检查

我为代码的混乱道歉。我一直想把它整理好,然后我会把它整理好。有更多的代码,但这不是必需的,因为我希望它运行的代码,如果没有匹配

请问你能帮忙吗

Sub sort_it_out()

 Dim wb1 As Workbook
 Dim wb2 As Workbook
 Dim Sheet As Worksheet
 Dim filnam As Variant
 On Error GoTo errorhandler

 Set wb1 = ActiveWorkbook

 ChDir Application.ActiveWorkbook.path

    'get files
    filnam = Application.GetOpenFilename(FileFilter:="2D Table Formats (*.htm;*.xlsm;*.html),*.htm;*.xlsm;*.html", Title:="Select 2D Table", MultiSelect:=True)

    'set the array
    If IsArray(filnam) Then 'if at least one file is selected, this will be an Array

    'define j as the array
    For j = LBound(filnam) To UBound(filnam)

    'remove path and extension
    Dim s As String, a() As String, p As String
    s = filnam(j)
    a() = Split(s, "\")
    p = Split(a(UBound(a)), ".")(0)

    MsgBox "p " & p

    'check if worksheet exists
    For Each ws_check In ThisWorkbook.Worksheets()

        If ws_check.Name = p Then
            MsgBox "Its there"
            Exit Sub
            Else
        End If
   Next ws_check

   'continue code from here

然后运行代码。。。但由于某种原因,它不会循环数组。一次只能有一个文件。你能帮忙吗

遵循您的代码有点困难,但这是否符合您的要求

我认为您将文件名存储在p变量中,因此我下面的代码将检查工作簿中的每个工作表,看看它们是否与p变量同名

Public Sub CompareWorksheetNamesToFiles()

    Dim file_name As String
    file_name = ActiveWorkbook.Name

    Dim ws_check As Worksheet
    For Each ws_check In ThisWorkbook.Worksheets()

        If ws_check.Name = p Then
            Debug.Print ("Do Something")
        End If

    Next ws_check

End Sub

我现在已经把一切都解决了

这将打开文件位置,将它们的路径缩短为文件名减去扩展名,然后ws-check根据文件名检查工作表,然后looper跳转到下一个

谢谢你一直以来对我的帮助

Sub sort_it_out()

 Dim filnam As Variant

 'open file locations
 filnam = Application.GetOpenFilename(FileFilter:="2D Table Formats (*.htm;*.xlsm;*.html),*.htm;*.xlsm;*.html", Title:="Select 2D Table", MultiSelect:=True)

 'if at least one file is selected, this will be an Array 
    If IsArray(filnam) Then 

    For j = LBound(filnam) To UBound(filnam)

 'remove pathway and extension from entire filename and path. ie C:\open.txt becomes open.

    Dim s As String, a() As String, p As String
    s = filnam(j)
    a() = Split(s, "\")
    p = Split(a(UBound(a)), ".")(0)


 'check if worksheet exists against p ... ie if theres a worksheet called open it will goto the next option if not it will continue through code
    For Each ws_check In ThisWorkbook.Worksheets()

        If ws_check.Name = p Then
            MsgBox p & " has already been transfered across. ", vbExclamation 'lets the user know this is already there.

            GoTo looper
            Else
        End If
   Next ws_check

 'do something here with the code if not found. IE MSGBOX " NOT FOUND "

 'jump to this point if there is a match. 
looper:
Next
    Else
    Exit Sub

End If

End Sub

非常感谢。我进去后会检查的。filnam是将文件打开到数组中的内容。Filnam(j)调用数组,然后我必须用p来缩短它,以删除所有额外的路径信息。这会检查每个打开的文件还是只检查p中的一个文件?我想我需要将p定义为filnam中的数组,如果这让sensewell觉得你的p似乎在for循环中,所以我想你正在检查数组中的每个文件,并用文件名填充p。但是我可能错了。嗨,检查很有效,谢谢你,但不是一次只检查一个阵列。我做错什么了吗?