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。但是我可能错了。嗨,检查很有效,谢谢你,但不是一次只检查一个阵列。我做错什么了吗?