如何从多个关闭的excel工作簿中提取数据,以便通过VBA将其放置在不同工作表的单独工作簿中?

如何从多个关闭的excel工作簿中提取数据,以便通过VBA将其放置在不同工作表的单独工作簿中?,excel,excel-2010,vba,Excel,Excel 2010,Vba,(这里是初学者VBA编码器!) 有人知道如何从具有相同工作表格式的多个已关闭工作簿中提取多个特定单元格数据吗 我目前的任务是从许多不同的和新的(但格式相同)来源复制特定单元格中的特定数据,并将它们传输到现有主列表中具有不同工作表的另一组特定单元格中 这是我希望能有所帮助的代码,但与我需要的相比,它在很多方面都有所欠缺 Sub Importsheet() Dim Importsheet As Worksheet 'import worksheet from a closed workbook

(这里是初学者VBA编码器!) 有人知道如何从具有相同工作表格式的多个已关闭工作簿中提取多个特定单元格数据吗

我目前的任务是从许多不同的和新的(但格式相同)来源复制特定单元格中的特定数据,并将它们传输到现有主列表中具有不同工作表的另一组特定单元格中

这是我希望能有所帮助的代码,但与我需要的相比,它在很多方面都有所欠缺

Sub Importsheet() 
Dim Importsheet As Worksheet 
'import worksheet from a closed workbook
Sheets.Add Type:= _ 
'e.g. directory below
"C:\Users\Loli\Desktop\Testing1.xlsx" 
End Sub 

这段代码帮助我从封闭源代码工作簿中获取工作表,但不获取封闭源代码excel中专门放置的单元格。它也无法将数据粘贴到目标excel中不同工作表中特定位置的单元格中。

很难完全理解您的要求,因为有时您似乎想要复制一个区域,有时则要复制一个单元格,因此,为了给您指出正确的方向,我的答案只显示了如何打开相关工作表并将其复制到主工作簿中,以便能够引用所需的单元格/区域

(我会在您获得数据后删除工作表,以便您的主控形状不会突然变大):


为什么不循环导入并将数据添加到名为Temp的新工作表中,然后从该工作表中提取特定单元格并将其添加到主工作表中,然后删除Temp工作表并循环到下一个文件?您是否有要导入的所有文件的列表?或者它们被分组在同一个文件夹(目录)中?要复制特定的单元格,您需要打开Excel文件(该文件可以隐藏在后台,并且是只读的,在google上有几个关于此的教程),然后在需要的地方进行复制和粘贴。但如果不打开源Excel文件,我几乎看不到解决这个问题的机会。@Xabier感谢您的回复!工作簿始终分组在同一个windows文件夹中。我理解你的想法,但我仍然希望使系统更易于使用,因为我导入的文件通常>40,并且每天都会刷新。Peh的评论是最好的选择,你可以循环浏览文件夹中的所有.xlsx文件,然后让代码更新你的主控文件,然后可能会从该文件夹中删除文件,这样它们就不会再次导入…谢谢您的帮助!你知道有哪种代码只能从关闭的excel而不是整个工作表中提取一系列数据吗?我在答案中添加了一行代码,用于复制要复制的工作表的指定范围。。如果我的回答对你有帮助的话,请你记下我的回答,谢谢。
Sub ImportSheet() 
    Dim sImportFile As String, sFile As String 
    Dim sThisBk As Workbook 
    Dim vfilename As Variant 
    Application.ScreenUpdating = False 
    Application.DisplayAlerts = False 
    Set sThisBk = ActiveWorkbook 
    sImportFile = Application.GetOpenFilename( _ 
    FileFilter:="Microsoft Excel Workbooks, *.xls; *.xlsx", Title:="Open Workbook")  'open dialog to choose the file you want, you can change this to loop through a folder if they are all in there.
    If sImportFile = "False" Then 'check if a file was selected before importing
        MsgBox "No File Selected!" 
        Exit Sub 

    Else 
        vfilename = Split(sImportFile, "\") 
        sFile = vfilename(UBound(vfilename)) 
        Application.Workbooks.Open Filename:=sImportFile 'open the selected file

        Set wbBk = Workbooks(sFile) 
        With wbBk 
            If SheetExists("Raw_Data") Then ' you should change this to the date, you can do this easily by using a variable such as if SheetExists(variableDate) then, where variableDate = "12/12/2017" or something similar
                Set wsSht = .Sheets("Raw_Data") 
                wsSht.Copy before:=sThisBk.Sheets("Sheet1") 'copy the worksheet into your master
                'WsSht.range("A1:B2").copy Destination:=sThisBk.Sheets("Temp").Range("A1").paste xlpastevalues 'use this to copy a specified range in this case A1:B2 to a sheet in master workbook called Temp A1
            Else 
                MsgBox "There is no sheet with name :Raw_Data in:" & vbCr & .Name 
            End If 
            wbBk.Close SaveChanges:=False 
        End With 
    End If 
    Application.ScreenUpdating = True 
    Application.DisplayAlerts = True 
End Sub 

Private Function SheetExists(sWSName As String) As Boolean 
    Dim ws As Worksheet 
    On Error Resume Next 
    Set ws = Worksheets(sWSName) 
    If Not ws Is Nothing Then SheetExists = True 
End Function