2016-05-25 2 views
0

Я пытаюсь использовать for -loop, чтобы забрать данные из нескольких файлов, но какой-то образом либо одного диапазона ячеек или именованный диапазон не работает:VBA Для проходного имени ошибки диапазона

Sub GetTTData() 
    ' Original from: 
    ' http://ccm.net/faq/24666-excel-vba-copy-data-to-another-workbook 

    ' CopyOpenItems Macro 
    ' Copy open items to sheet. 
    ' 
    ' Keyboard Shortcut: Ctrl+Shift+O 
    ' 
    Dim wbReport    As Workbook 'workbook where the data is to be pasted 
    Dim wbTTData    As Workbook 'workbook from where the data is to copied 
    Dim strName    As String 'name of the source sheet/ target workbook 
    Dim fileName    As String 
    Dim RAWDataSheet   As Worksheet 
    Dim SourceDataSheet  As Worksheet 
    Dim RAWData    As Range 
    Dim SourceData   As Range 
    Dim portName    As String 
    Dim rCell    As Range 
    Dim files    As Range 

    'set to the current active workbook (the source book) 
    Set wbReport = ThisWorkbook 
    'select Departure Airport 
    portName = Worksheets("Control").Range("Dep_Airport") 
    Set files = Worksheets("Control").Range("All_Files") 

    'select cell A2 on the target book 
    Set RAWDataSheet = wbReport.Worksheets("RAW TT Data") 
    RAWDataSheet.Activate 
    Set RAWData = RAWDataSheet.Range(Range("A2"), ActiveCell.SpecialCells(xlLastCell)) 

    'clear existing values form target book 
    RAWData.ClearContents 

    For Each rCell In Range("files") 

     'take source of TT Data from workbook and open file 
     fileName = Worksheets("Control").Range("File_Path") + Worksheets("Control").Range("rCell") 
     Set wbTTData = Workbooks.Open(fileName) 

     'activate the source book 
     wbTTData.Activate 

     'clear any thing on clipboard to maximize available memory 
     Application.CutCopyMode = False 

     'copy the range from source book 
     Set SourceDataSheet = wbTTData.Sheets("Sheet1") 

     'filter RAW TT Data for Departure Airport 
     Set RAWData = SourceDataSheet.Range(Range("A1"), ActiveCell.SpecialCells(xlLastCell)) 
     RAWData.AutoFilter Field:=3, Criteria1:=Array(portName), Operator:=xlFilterValues 

     Set SourceData = SourceDataSheet.Range(Range("A2"), ActiveCell.SpecialCells(xlLastCell)) 
     SourceData.Copy 

     'paste the data on the target book 
     RAWDataSheet.Range("A2").PasteSpecial 

     'clear any thing on clipboard to maximize available memory 
     Application.CutCopyMode = False 

     'save the target book 
     wbReport.Save 

     'close the workbook 
     wbTTData.Close savechanges:=False 

    Next rCell 

    'activate the source book again 
    wbReport.Activate 

    'clear memory 
    Set wbReport = Nothing 
    Set wbTTData = Nothing 
    Set SourceDataSheet = Nothing 
    Set SourceData = Nothing 

End Sub 

ответ

1

у вас есть эта переменная:

Dim files As Range 

А потом установить его здесь:

Set files = Worksheets("Control").Range("All_Files") 

затем, когда вы начинаете вас г петли ваш код:

For Each rCell In Range("files") 

Я думаю, что вы имеете в виду для вашего кода следующим образом:

For Each rCell In files 
Смежные вопросы