【问题标题】:How to open certain excel folders in a file with a common name using vba如何使用 vba 在具有通用名称的文件中打开某些 excel 文件夹
【发布时间】:2011-06-09 01:45:54
【问题描述】:

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

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

我有提取数据的代码,它有效,但它要么导入文件夹中的所有数据,要么根本不导入!

我们将不胜感激任何帮助,因为我是一名试图让他踏上大门的实习生,这对我来说将是一个很大的突破!

更多信息

到目前为止,我有下面的代码(我没有包括昏暗的,因为我觉得它们可能没有必要?),这是我从其他网站上提取的。我还发现,在尝试打开文件夹中的所有文件时,它正在尝试打开自己!如果有人能建议如何改进这一点,我将不胜感激。我已经很久没有使用 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

【问题讨论】:

    标签: file excel directory vba


    【解决方案1】:

    你现在在用什么?对于文件夹中的每个文件?

    可能性包括

    • 文件系统对象
    • 目录
    • 对于 i=1 到 12
      月份名称(i)

    编辑

    Sub import_data()
    
        sPath = ThisWorkbook.Path
        sTemplate = "\profit for qqq.xls"
    
        For i = 1 To 12
            sFileName = Replace(sTemplate, "qqq", MonthName(i))
    
            ''Just checking
            If Dir(sPath & sFileName) <> "" Then
                Workbooks.Open Filename:= _
                    sPath & 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
    

    【讨论】:

      【解决方案2】:

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

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

      非常感谢和最诚挚的问候, 标记

      子导入数据()

      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
      

      结束子

      【讨论】:

      • 嗨,马克,所以,这个区域是为答案保留的。我将编辑您的帖子以包含此部分,您可以要求将其删除。好的? :)
      • 我在回答中添加了一些注释。
      猜你喜欢
      • 2015-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多