File 如何使用vba以通用名称打开文件中的某些excel文件夹

File 如何使用vba以通用名称打开文件中的某些excel文件夹,file,excel,directory,vba,File,Excel,Directory,Vba,我的问题是,我需要使用VBA(用于excel 2007)打开一些excel文件并提取数据。我想打开的所有文件都称为“一月的利润.xlsx”、“二月的利润.xlsx”,等等,只是月份名称发生了变化,所以我想打开一个名为“利润*”的文件。文件夹中还有一个名为“total revenue.xlsx”的文件,我不想打开 如果可能的话,我需要代码从文件夹中的文件中提取数据,无论文件夹位于何处,因为我将此代码发送给我的同事,以放入他们自己的文件夹中,这些文件夹具有相同的文件名格式等,但路径不同 我有代码来提

我的问题是,我需要使用VBA(用于excel 2007)打开一些excel文件并提取数据。我想打开的所有文件都称为“一月的利润.xlsx”、“二月的利润.xlsx”,等等,只是月份名称发生了变化,所以我想打开一个名为“利润*”的文件。文件夹中还有一个名为“total revenue.xlsx”的文件,我不想打开

如果可能的话,我需要代码从文件夹中的文件中提取数据,无论文件夹位于何处,因为我将此代码发送给我的同事,以放入他们自己的文件夹中,这些文件夹具有相同的文件名格式等,但路径不同

我有代码来提取数据,这是可行的,但它要么导入文件夹中的所有数据,要么根本没有

在这方面的任何帮助都将不胜感激,因为我是一名实习生,正试图让他的脚踏上这扇门,这对我来说将是一个巨大的突破

进一步信息


到目前为止,我有下面的代码(我没有包括dim,因为我觉得它们可能是不必要的?),这是我从其他网站上获得的。我还发现,在试图打开文件夹中的所有文件时,它试图打开自己!如果有人能提出改进的建议,我将不胜感激。我已经很长时间没有使用VBA了,我发现这个任务很难

出现的错误框有时会说,我需要一个“对象”作为变量sfilename,我不知道如何在不弄乱代码另一部分的情况下做到这一点

sub import data ()

ChDir ThisWorkbook.Path

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set sfolder = objFSO.GetFolder(ThisWorkbook.Path)

    For Each sfilename In sfolder.Files

        If sfilename <> "Total Revenue.xlsx" Then

            Workbooks.Open Filename:= _
                sfilename                             *'open the file*

            Set sfilename = ActiveWorkbook   *'set the file name as sfilename, so the single piece of code will work with the copy-loop*

            b = Sheets.Count                                *'for the data-import loop*

            Call ImportData                                 *'call in the loop*
            sfilename.Close                                 *'close the file*

        End If

    Next

end sub
子导入数据()
ChDir ThisWorkbook.Path
设置objFSO=CreateObject(“Scripting.FileSystemObject”)
Set sfolder=objFSO.GetFolder(ThisWorkbook.Path)
对于sfolder.Files中的每个sfilename
如果sfilename为“Total Revenue.xlsx”,则
工作簿。打开的文件名:=_
sfilename*'打开文件*
Set sfilename=ActiveWorkbook*'将文件名设置为sfilename,这样单个代码就可以与复制循环一起工作*
b=数据导入循环的Sheets.Count*'*
调用ImportData*'在循环中调用*
sfilename.Close*'关闭文件*
如果结束
下一个
端接头

您目前正在使用什么?对于文件夹中的每个文件

可能性包括

  • 文件系统对象
  • 迪尔
  • 对于i=1到12
    蒙特纳姆(一)
编辑

子导入_数据()
sPath=ThisWorkbook.Path
sTemplate=“\qqq.xls的利润”
对于i=1到12
sFileName=替换(示例“qqq”,MonthName(i))
“只是检查一下
如果目录(sPath&sFileName)“,则
工作簿。打开的文件名:=_
sPath&sFileName
'打开文件*
设置sFileName=ActiveWorkbook
'将文件名设置为sfilename,以便
'这段代码将用于复制循环*
b=床单数
数据导入循环的“*”*
''调用导入数据
循环中的'*'调用*
sFileName,关闭
“*”关闭文件*
如果结束
下一个
端接头

您目前正在使用什么?对于文件夹中的每个文件

可能性包括

  • 文件系统对象
  • 迪尔
  • 对于i=1到12
    蒙特纳姆(一)
编辑

子导入_数据()
sPath=ThisWorkbook.Path
sTemplate=“\qqq.xls的利润”
对于i=1到12
sFileName=替换(示例“qqq”,MonthName(i))
“只是检查一下
如果目录(sPath&sFileName)“,则
工作簿。打开的文件名:=_
sPath&sFileName
'打开文件*
设置sFileName=ActiveWorkbook
'将文件名设置为sfilename,以便
'这段代码将用于复制循环*
b=床单数
数据导入循环的“*”*
''调用导入数据
循环中的'*'调用*
sFileName,关闭
“*”关闭文件*
如果结束
下一个
端接头

到目前为止,我有下面的代码(我没有包括dim,因为我觉得它们可能不必要?),我是从其他网站上提取的。我还发现,在试图打开文件夹中的所有文件时,它试图打开自己!如果有人能提出改进的建议,我将不胜感激。我已经很长时间没有使用VBA了,我发现这个任务很难

出现的错误框有时会说,我需要一个“对象”作为变量sfilename,我不知道如何在不弄乱代码另一部分的情况下做到这一点

sub import data ()

ChDir ThisWorkbook.Path

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set sfolder = objFSO.GetFolder(ThisWorkbook.Path)

    For Each sfilename In sfolder.Files

        If sfilename <> "Total Revenue.xlsx" Then

            Workbooks.Open Filename:= _
                sfilename                             *'open the file*

            Set sfilename = ActiveWorkbook   *'set the file name as sfilename, so the single piece of code will work with the copy-loop*

            b = Sheets.Count                                *'for the data-import loop*

            Call ImportData                                 *'call in the loop*
            sfilename.Close                                 *'close the file*

        End If

    Next

end sub
非常感谢和亲切的问候, 标记

子导入数据()

ChDir ThisWorkbook.Path

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set sfolder = objFSO.GetFolder(ThisWorkbook.Path)

For Each sfilename In sfolder.Files

    If sfilename <> "Total Revenue.xlsx" Then

        Workbooks.Open Filename:= _
            sfilename                             *'open the file*

        Set sfilename = ActiveWorkbook   *'set the file name as sfilename, so the single piece of code will work with the copy-loop*

        b = Sheets.Count                                *'for the data-import loop*

        Call ImportData                                 *'call in the loop*
        sfilename.Close                                 *'close the file*

    End If

Next
Set objFSO=CreateObject(“Scripting.FileSystemObject”)
Set sfolder=objFSO.GetFolder(ThisWorkbook.Path)
对于sfolder.Files中的每个sfilename
如果sfilename为“Total Revenue.xlsx”,则
工作簿。打开的文件名:=_
sfilename*'打开文件*
Set sfilename=ActiveWorkbook*'将文件名设置为sfilename,这样单个代码就可以与复制循环一起工作*
b=数据导入循环的Sheets.Count*'*
调用ImportData*'在循环中调用*
sfilename.Close*'关闭文件*
如果结束
下一个

end sub

到目前为止,我有下面的代码(我没有包括dim,因为我觉得它们可能是不必要的?),这是我从其他网站获得的。我还发现,在试图打开文件夹中的所有文件时,它试图打开自己!如果有人能提出改进的建议,我将不胜感激。我没去过