2016-01-20 1 views
5

私はブラジルの工業会社のインターンで、私は多くのExcelを使用しています。私はちょうど数日前にVBAで遊び始めました。私はそれが私のためにできる多くのことを楽しんでいます!!VBA - 閉鎖されたブックからデータをコピーするのに最適な方法

私は強いプログラミングの背景を持っていないので、私は基本的にやって学んでいます。コードは正常に動作しており、開始から終了までに15秒以下かかります。私は時間を気にしないが、それが改善されればそれは素晴らしいだろう。

私の主な目標は、コードをシンプルかつ効率的に保つことです。私は数ヶ月後に会社を辞めてしまいますし、それを手に入れて使うのは簡単です。私が求めているのは、自分のコードを書くより良い方法です。他の人が理解しやすいようにしてください。可能であれば、時間がかからないようにしてください!

私のコードは、現在のワークブックで4枚のコンテンツを削除してから、残りの4枚の閉鎖ブックから更新データをコピーします。その後、すべてを閉じます。 :)データは毎日の生産についてのもので、その名前はポルトガル語であり、残念です。

Sub CopiarBase() 

' 
' Atalho do teclado: Ctrl+q 
' 


    ' Variables 
    Dim MyCurrentWB As Workbook 
    Dim BMalharia As Worksheet 
    Dim BBeneficiamento As Worksheet 
    Dim BEmbalagem As Worksheet 
    Dim BDikla As Worksheet 

    Set MyCurrentWB = ThisWorkbook 
    Set BMalharia = MyCurrentWB.Worksheets("B-Malharia") 
    Set BBeneficiamento = MyCurrentWB.Worksheets("B-Beneficiamento") 
    Set BEmbalagem = MyCurrentWB.Worksheets("B-Embalagem") 
    Set BDikla = MyCurrentWB.Worksheets("B-Dikla") 

    'Clean all the cells - Workbook 1 


    Dim Malharia_rng As Range 
    Set Malharia_rng = BMalharia.Range("A2:CN" & BMalharia.Cells(Rows.Count, 1).End(xlUp).Row) 
    Malharia_rng.ClearContents 

    Dim Ben_rng As Range 
    Set Ben_rng = BBeneficiamento.Range("A2:CY" & BBeneficiamento.Cells(Rows.Count, 1).End(xlUp).Row) 
    Ben_rng.ClearContents 

    Dim Emb_rng As Range 
    Set Emb_rng = BEmbalagem.Range("A2:CT" & BEmbalagem.Cells(Rows.Count, 1).End(xlUp).Row) 
    Emb_rng.ClearContents 

    Dim Dikla_rng As Range 
    Set Dikla_rng = BDikla.Range("A2:AV" & BDikla.Cells(Rows.Count, 1).End(xlUp).Row) 
    Dikla_rng.ClearContents 


    'Copy from Malharia Workbook 

    Workbooks.Open "C:\Users\marco.henrique\Desktop\Bases\Malharia Base.xls" 

    LastRowMB = Workbooks("Malharia Base.xls").Worksheets("Malharia Base").Cells(Rows.Count, 1).End(xlUp).Row 
    Dim Malha_base As Range 
    Set Malha_base = Workbooks("Malharia Base.xls").Worksheets("Malharia Base").Range("A2:CN" & LastRowMB) 

    MyCurrentWB.Worksheets("B-Malharia").Range("A2:CN" & LastRowMB).Value = Malha_base.Value 
    Workbooks("Malharia Base.xls").Close 

    'Copy from Beneficiamento Workbook 

    Workbooks.Open "C:\Users\marco.henrique\Desktop\Bases\Beneficiamento Base.xls" 

    LastRowBB = Workbooks("Beneficiamento Base.xls").Worksheets("Beneficiamento Base").Cells(Rows.Count, 1).End(xlUp).Row 
    Dim Ben_base As Range 
    Set Ben_base = Workbooks("Beneficiamento Base.xls").Worksheets("Beneficiamento Base").Range("A2:CY" & LastRowBB) 

    MyCurrentWB.Worksheets("B-Beneficiamento").Range("A2:CY" & LastRowBB).Value = Ben_base.Value 
    Workbooks("Beneficiamento Base.xls").Close 

    'Copy from Embalagem Workbook 

    Workbooks.Open "C:\Users\marco.henrique\Desktop\Bases\Embalagem Base.xls" 

    LastRowEB = Workbooks("Embalagem Base.xls").Worksheets("Embalagem Base").Cells(Rows.Count, 1).End(xlUp).Row 
    Dim Emb_base As Range 
    Set Emb_base = Workbooks("Embalagem Base.xls").Worksheets("Embalagem Base").Range("A2:CT" & LastRowEB) 

    MyCurrentWB.Worksheets("B-Embalagem").Range("A2:CT" & LastRowEB).Value = Emb_base.Value 
    Workbooks("Embalagem Base.xls").Close 

    'Copy from Dikla Workbook 

    Workbooks.Open "C:\Users\marco.henrique\Desktop\Bases\Diklatex Base.xls" 

    LastRowDB = Workbooks("Diklatex Base.xls").Worksheets("Diklatex Base").Cells(Rows.Count, 1).End(xlUp).Row 
    Dim Dikla_base As Range 
    Set Dikla_base = Workbooks("Diklatex Base.xls").Worksheets("Diklatex Base").Range("A2:AV" & LastRowDB) 

    MyCurrentWB.Worksheets("B-Dikla").Range("A2:AV" & LastRowDB).Value = Dikla_base.Value 
    Workbooks("Diklatex Base.xls").Close 

End Sub 

私は十分にはっきりしていないと申し訳ありませんが、もちろん英語は母国語ではありません。私のコードや考え方に疑問があれば、自由に質問することができます。

お手数ですが、事前におねがいします。

+2

[コードレビュー](http://codereview.stackexchange.com/) –

+1

これは[codereview.se]について良い質問であってもよいし、 **(A)** _そのコードは働いています**、(B)** _itは仮説でもなく不完全でもありません。 [Code Review](http://codereview.stackexchange.com/)に行くことを選択した場合は、投稿する前に[トピックに関する](http://codereview.stackexchange.com/help/on-topic)をお読みください。質問/尋ねる)。ご質問やご不明な点がございましたら、[CRヘルプデスク](http://chat.stackexchange.com/rooms/34045)にご連絡ください。 – Phrancis

+0

私はそれをします。混乱のために申し訳ありません! – mschlindwein

答えて

0

は、私はあなたが惜しまれますどのくらいの時間がわからないが、私は明らかにサブの始まり(と同じラインで

Application.ScreenUpdating = False 

を追加することにより、マクロが実行されている画面のリフレッシュを無効にすることをお勧めします最後に)

1

通常、画面の更新をオンにして、ブックに何かをする前にインタラクティブに計算してから、前の状態に戻します。

Dim oldInteractive As Boolean = Application.Interactive 
Dim oldCalulation As XlCalculation = Application.Calculation 
Dim oldScreenUpdating As Boolean = Application.ScreenUpdating 
Application.Interactive = False 
Application.Calculation = XlCalculation.xlCalculationManual 
Application.ScreenUpdating = False 

'Your code here 

Application.Interactive = oldInteractive 
Application.Calculation = oldCalulation 
Application.ScreenUpdating = oldScreenUpdating 

これにより、コードの実行中に計算が行われず、多くのことが遅くなる可能性があります。 Application.Calculationを元の値に戻すことは重要です。これは、コードが終了した後も設定を維持するため、混乱を招く可能性があります。

それは正確には適していますので、私は、オフトピックとして、この質問を閉じるために投票しています
関連する問題