VBA-从通过getopenfilename打开的工作簿数组中提取工作簿名称

VBA-从通过getopenfilename打开的工作簿数组中提取工作簿名称,vba,getopenfilename,Vba,Getopenfilename,嘿,我有下面的代码。我希望能够通过application.getopenfilename打开多个工作簿,然后提取相应的图书名称,将它们与列表进行比较 我不知道为什么,但每当我试图提取工作簿名称时,就会弹出“需要对象”错误。在这个exactract中,我使用了dir,但是如果我使用name或path,结果就是名称,如果我尝试使用Filenales(I)而不是活动工作簿,则会出现相同的错误。有人能帮我解释一下到底发生了什么吗?提前谢谢大家, Sub importDealflow() Dim

嘿,我有下面的代码。我希望能够通过application.getopenfilename打开多个工作簿,然后提取相应的图书名称,将它们与列表进行比较

我不知道为什么,但每当我试图提取工作簿名称时,就会弹出“需要对象”错误。在这个exactract中,我使用了dir,但是如果我使用name或path,结果就是名称,如果我尝试使用Filenales(I)而不是活动工作簿,则会出现相同的错误。有人能帮我解释一下到底发生了什么吗?提前谢谢大家,

Sub importDealflow()
    Dim twb As Workbook, aWB As Workbook
    Dim Userrange As Range, cell As Range
    Dim Defaultrange As Range
    Dim x As Long, Ent As Variant
    Dim FileNames() As Variant, nw As Integer
    Dim i As Integer
    Dim FN As String, pth() As Variant
    Dim Getbook As String
    
    Set twb = ThisWorkbook
    Set Userrange = twb.Sheets("Deal Workflow").Range("G5:G28")
    
    FileNames = Application.GetOpenFilename(FileFilter:="Excel Filter(*.xlsx),*xlsx", Title:="Open File(s)", MultiSelect:=True)
    nw = UBound(FileNames)
    
    For Each cell In Userrange
        If cell.Value <> "" Then
            Ent = Mid(cell, InStr(cell, "(") + 1, InStr(cell, ")") - InStr(cell, "(") - 1)
        End If
            
        For i = 1 To nw
            Workbooks.Open FileNames(i)
            Set aWB = ActiveWorkbook
            Set Getbook = Dir(ActiveWorkbook)
            If Left(pth, InStr(pth(i), "-" - 1)) = Ent Then
                MsgBox Ent
            End If
        Next i
    Next
End Sub
Sub-importDealflow()
将twb设置为工作簿,将aWB设置为工作簿
Dim Userrange作为范围,单元格作为范围
将默认范围设置为范围
尺寸x与长度相同,Ent与变体相同
Dim FILENAME()作为变量,nw作为整数
作为整数的Dim i
Dim FN作为字符串,pth()作为变量
将Getbook设置为字符串
设置twb=ThisWorkbook
设置Userrange=twb.Sheets(“交易工作流”).Range(“G5:G28”)
FileNames=Application.GetOpenFilename(FileFilter:=“Excel过滤器(*.xlsx),*xlsx”,Title:=“打开的文件”,MultiSelect:=True)
nw=UBound(文件名)
对于Userrange中的每个单元格
如果单元格的.Value为“”,则
Ent=Mid(单元,仪表(单元,“(”)+1,仪表(单元,“)”))-InStr(单元,“(”)-1)
如果结束
对于i=1至nw
工作簿.打开的文件名(i)
设置aWB=ActiveWorkbook
设置Getbook=Dir(活动工作簿)
如果左侧(pth,仪表(pth(i),“-”-1))=Ent,则
MsgBox Ent
如果结束
接下来我
下一个
端接头

Dir()函数返回一个字符串。Set assignment关键字仅用于对象。您不需要为字符串设置。谢谢您的帮助。但是,即使在我删除Set时,仍然会出现错误438。对象不支持此属性或方法。请尝试设置问题的格式,以便代码更易于阅读。只是不清楚您在尝试什么为了实现。我有一个excel文件,我想从同一文件夹中的不同文件导入数据。excel文件中的每一行都匹配一个同名文件。我想使用application.getopenfile打开不同的文件,然后使用for循环遍历这些行,并将右行与右文件匹配,然后导入将此特定文件中的数据排序到此行中。问题是当我在文件名(I)上使用Dir、path或name时这是getopenfile数组,它显示错误438。我希望这更清楚。您可能需要花一点时间了解VBA中的不同数据类型、如何使用调试器以及所使用函数的引用。但同时,(1)ActiveWorkbook是工作簿对象,而不是字符串。Dir()函数需要一个字符串。(2)将代码(未设置)更改为:Getbook=aWB.Name(3)可能将Left(pth,…)更改为Left(pth(i),…)。。。。