2017-06-18 17 views
0

クローズドブックのいくつかの列をアクティブブックにコピーしたいと思います。 私の列が分離されているので、私はそれをCollection変数を使ってループで行いたいと思います。vba - コレクションを繰り返し処理する

ここに私のコード(EDIT)

Option Explicit 

Sub CopyDataFromClosedWbk() 

    'copy data from closed workbook to active workbook 
    Dim colonne As Collection 
    Dim col As Variant 
    Dim xlApp As Application 
    Dim xlBook As Workbook 
    Dim Sh As Object 

    Set colonne = New Collection 

    colonne.Add "A:B", "A1" 
    colonne.Add "E:F", "G1" 
    colonne.Add "N", "I1" 
    colonne.Add "P", "F1" 


    Set xlApp = CreateObject("Excel.Application") 


    'Path source workbook 
    Set xlBook = xlApp.Workbooks.Open("C:\Users\Amira AYADI\Desktop\Stage\Automatisation\Base Case_BDD CAPACITAIRE_ENVOYE_V2 2017_2023_24042017.xlsx") 
    xlBook.Sheets("DATA").Range("A1:CJ374810").AutoFilter 
    xlBook.Sheets("DATA").Range("BD1").Select 
    xlBook.Sheets("DATA").Range("$A$1:$CJ$374810").AutoFilter Field:=56, Criteria1:="CMR" 

    For Each col In colonne 

     xlBook.Sheets("DATA").Range(col).Copy 
     xlApp.DisplayAlerts = False 
     Debug.Print col 
     Set xlBook = Nothing 
     Set xlApp = Nothing 
     Set xlBook = ActiveWorkbook 
     Set Sh = xlBook.Sheets("Calcul") 
     'Sh.Activate 
     Range(colonne.Item(col)).Select 
     Sh.paste 


    Next col 

    xlBook.Close 
    xlApp.Quit 


End Sub 

しかし、それは動作しませんし、いくつかのミスがあります。

まず

Range(colonne.Item(col)).Select 

は "COL" whith動作しませんが、私はインデックスと思います。では、Keyの値をどのように反復処理できますか?

第二に、私は(試みのために)そのように1 COLをremplace:

Range(colonne.Item(1)).Select 

私は91のエラーがあります:オブジェクト変数またはブロック設定されていないとします。

これに加えて、ワークブック「source.xlsx」が変更可能な状態であることを示すポップアップウィンドウがあります。どうすればこのことができますか?

ご意見はありますか?

+0

'.Select'を使用しないでください。また、すべてのセルの後にワークブームを開いたり閉じたりしています。効率的ではありません。 – UGP

+0

私は注意を払わなかった、ありがとう。 私はそれをどのように.selectを使用しないのですか? Range(colonne.Item(col))を試しましたが貼り付けができませんでした。 – blabla

+0

ここでは、Collectioningの代わりにScripting.Dictionaryを使用する必要がありますので、キーと値の両方にアクセスできます。 https://stackoverflow.com/questions/5702362/vba-collection-list-of-keys –

答えて

0

はこれを試してみてください:

Option Explicit 

Sub CopyDataFromClosedWbk() 

    Dim xlApp As Application 
    Dim xlBook As Workbook 
    Dim sht As Worksheet, sht2 As Worksheet 

    Set sht2 = ThisWorkbook.Sheets("Calcul") 
    Set xlApp = CreateObject("Excel.Application") 
    Set xlBook = xlApp.Workbooks.Open("C:\Users\User\Desktop\source.xlsx") 'Adjust 
    Set sht = xlBook.Worksheets("DATA") 
    xlApp.DisplayAlerts = False 

    sht.Range("A:CJ").AutoFilter Field:=56, Criteria1:="CMR" 
    sht.Range("A:B").Copy: sht2.Range("A1").PasteSpecial xlPasteValues 
    sht.Range("E:F").Copy: sht2.Range("G1").PasteSpecial xlPasteValues 
    sht.Range("N:N").Copy: sht2.Range("I1").PasteSpecial xlPasteValues 
    sht.Range("P:P").Copy: sht2.Range("F1").PasteSpecial xlPasteValues 

    xlBook.Close 
    xlApp.Quit 
End Sub 

を私はtheresの場合は、列が、そのはるかに簡単にこの方法を保存するために、コレクション/辞書を使用しての背後に何らかの理由を知りません。

+0

ありがとうございます!これは完璧ではるかに簡単です – blabla

関連する問題