Как извлечь данные из нескольких закрытых книг Excel для размещения в отдельной книге на разных листах через VBA?

(Здесь начинающий 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.

1 ответ

Очень сложно полностью понять ваши требования, так как иногда кажется, что вы хотите скопировать диапазон, а иногда - одну ячейку, поэтому, чтобы указать вам правильное направление, мой ответ только показывает, как открыть и скопировать соответствующий лист в ваш мастер книга, чтобы иметь возможность ссылаться на ячейку / диапазоны, которые вы хотите

(Я хотел бы, как только вы получите ваши данные, затем удалите рабочую таблицу, чтобы ваш мастер не стал внезапно огромным по размеру):

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 
Другие вопросы по тегам