【问题标题】:Open a file/folder from a specified cell从指定单元格打开文件/文件夹
【发布时间】:2017-10-13 16:49:41
【问题描述】:

如果有任何帮助,我将不胜感激!我正在尝试找出正确的代码,以便动态地从文件夹 "2017"(如下所示)中提取。在此文件夹中有许多 Excel 工作簿。 vba 从那里复制一系列单元格并将其粘贴到原始工作簿中。到目前为止,代码是非常手动的,每当我尝试切换文件夹来源时,我都必须在代码中手动更改它。

有人可以帮助我将代码编辑为动态吗?例如:我希望实现的是,如果文件夹的名称在单元格 A1 中。然后 vba 代码将打开文件夹并从单元格 A1 中的任何名称中提取工作簿。

如果我可以提供任何其他信息,请告诉我!

提前感谢您!

  Sub ArrDepMerge2017()


Dim bookList As Workbook
Dim mergeObj As Object, dirObj As Object, filesObj As Object, everyObj As Object
Dim c As Long

Set mergeObj = CreateObject("Scripting.FileSystemObject")
Set dirObj = mergeObj.Getfolder("2017")
Set filesObj = dirObj.Files

For Each everyObj In filesObj
    Set bookList = Workbooks.Open(everyObj)
    c = c + 1
    bookList.Sheets(1).Range("F37:F53").Copy ThisWorkbook.Worksheets("2017 Data").Cells(1, c)
    bookList.Close

End Sub

【问题讨论】:

  • 你试过Set dirObj = mergeObj.Getfolder(Range("A1").value2)

标签: vba excel


【解决方案1】:

您将单元格值分配给变量,例如路径,然后在您的 GetFolder 中使用它。另外,使用 For Each 时添加 Next everyobj。

Sub ArrDepMerge2017()

Dim bookList As Workbook
Dim mergeObj As Object, dirObj As Object, filesObj As Object, everyObj As Object
Dim c As Long
Dim path as String

path = ThisWorkbook.Sheets("mysheetname").Range("myrange")

Set mergeObj = CreateObject("Scripting.FileSystemObject")
Set dirObj = mergeObj.Getfolder(path)
Set filesObj = dirObj.Files

For Each everyObj In filesObj
    Set bookList = Workbooks.Open(everyObj)
    c = c + 1
    bookList.Sheets(1).Range("F37:F53").Copy ThisWorkbook.Worksheets("2017 Data").Cells(1, c)
    bookList.Close
Next everyObj ' this was missing

End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-21
    • 2013-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-06
    • 2020-07-31
    相关资源
    最近更新 更多