2016-01-20 17 views
5

Brezilya'da bir endüstriyel şirkette stajyerim ve mükemmel bir şekilde kullanıyorum. Birkaç gün önce VBA ile oynamaya başladım ve benim için yapabileceği pek çok şeyden hoşlanıyorum!VBA - Kapalı bir çalışma kitabından veri kopyalamak için en iyi yöntem

Ben güçlü bir programlama arka plan yok, bu yüzden temelde yaparak öğreniyorum. Kod düzgün çalışıyor ve baştan sona 15 saniyeden daha kısa sürüyor. Zamanla uğraşmam ama eğer geliştirilebilirse harika olur.

Benim ana hedefi basit ve etkili bir kod tutmaktır. Önümüzdeki aylarda şirketten ayrılacağım ve bunu yönetmenin ve kullanmanın kolay olmasını istiyorum. Senden istediğim, diğerlerinin daha kolay anlayabilmesi için kodumu yazmanın daha iyi bir yolu ve eğer mümkünse (tabii ki!) Daha az zaman harcamam.

Kodum, geçerli çalışma kitabımdaki 4 sayfa içeriğini silip güncelleştirilmiş verileri diğer 4 kapalı çalışma kitabından kopyalayın. O zaman her şeyi kapat. :) Veriler günlük üretim ile ilgili ve isimleri portekizce, bunun için üzgünüm. Yeterince açık değildi benim anadilim değil ingilizce ders

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 

Üzgünüm. Benim kodum ya da tüm fikir hakkında herhangi bir şüphe soru sormaya çekinmeyin. herhangi bir yardım çocuklar için şimdiden

teşekkürler!

+2

[Code Review] (http://codereview.stackexchange.com/) –

+1

için tam olarak uygun olduğu için bu sorunun konu dışı olarak kapatılmasına oy veriyorum [codereview.se] için bu iyi bir soru olabilir, olduğu sürece: ** (A) ** _ kod çalışır_, ** ve (B) ** _ herhangi bir şekilde hipotetik veya eksik değildir. [Code Review] 'a (http://codereview.stackexchange.com/) gitmeyi seçerseniz, lütfen yayınlamadan önce [on-topic guide]' ı (http://codereview.stackexchange.com/help/on-topic) okuyun. soruları /) sorun. Herhangi bir sorunuz veya endişeniz varsa, [CR Yardım Masası] 'ndan bize katılın (http://chat.stackexchange.com/rooms/34045). – Phrancis

+0

Bunu yapacağım. Dağınıklık için üzgünüm! – mschlindwein

cevap

0

Sana yedek ne kadar zaman emin değilim, ama belli ki alt başında (ve aynı çizgi de

Application.ScreenUpdating = False 

ekleyerek, makro çalıştıran ekran yenileme devre dışı bırakılması öneririm Sonunda = True ile

1

Genelde ekran güncellemeyi çeviririm, etkileşime girer ve çalışma kitabına bir şey yapmadan önce hesaplar, sonra en son durumuna geri döndürürüm.

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 

Bu, kodunuz çalışırken çok şeyleri yavaşlatabilecek hesaplamalar yapılmasını engeller. Application.Calculation'ı kodunuzun bitiminden sonra bile ayarladığınız şekilde kalacağından, eski değere dönüştürmek önemlidir, bu da karışıklığa neden olabilir.

İlgili konular