Akıllı Sayfa 9.1.1
Smartsheet, projeleri yönetmenize, iş akışları oluşturmanıza ve ekibinizle işbirliği yapmanıza olanak tanıyan dinamik bir çalışma platformudur.
Excel makrolarınız giderek daha sağlam ve karmaşık hale geldikçe, performanslarını kaybettiklerini görebilirsiniz. Makroları tartışırken, performans kelimesi genellikle hız ile eş anlamlıdır . Hız, VBA prosedürlerinizin amaçlanan görevlerini ne kadar hızlı yerine getirdiğidir. Aşağıda, Excel makrolarınızın optimum performans düzeyinde çalışmasına yardımcı olacak on yol bulunmaktadır.
Elektronik tablonuzdaki herhangi bir formülü etkileyen bir hücre her değiştirildiğinde veya manipüle edildiğinde Excel'in tüm çalışma sayfasını yeniden hesapladığını biliyor muydunuz? Çok miktarda formül içeren çalışma sayfalarında bu davranış, makrolarınızı büyük ölçüde yavaşlatabilir.
Excel'e manuel hesaplama moduna geçmesini söylemek için Application.Calculation özelliğini kullanabilirsiniz. Bir çalışma kitabı manuel hesaplama modundayken, siz F9 tuşuna basarak bir hesaplamayı açıkça tetikleyene kadar çalışma kitabı yeniden hesaplama yapmaz.
Excel'i manuel hesaplama moduna alın, kodunuzu çalıştırın ve ardından otomatik hesaplama moduna geri dönün.
Alt Makro1() Application.Calculation = xlCalculationManual 'Makro kodunuzu buraya yerleştirin Uygulama.Hesaplama = xlHesaplamaOtomatik Alt Alt
Hesaplama modunu tekrar xlCalculationAutomatic olarak ayarlamak, çalışma sayfasının otomatik olarak yeniden hesaplanmasını tetikler, bu nedenle makronuz çalıştıktan sonra F9 tuşuna basmanız gerekmez.
Makrolarınız çalıştığında, ekranınızın oldukça fazla titrediğini fark edebilirsiniz. Bu titreme, Excel'in çalışma sayfasının mevcut durumunu göstermek için ekranı yeniden çizmeye çalışmasıdır. Ne yazık ki, Excel ekranı her yeniden çizdiğinde, bellek kaynaklarını kaplar.
Makronuz tamamlanana kadar ekran güncellemelerini devre dışı bırakmak için Application.ScreenUpdating özelliğini kullanabilirsiniz. Ekran güncellemesini devre dışı bırakmak zaman ve kaynak tasarrufu sağlayarak makronuzun biraz daha hızlı çalışmasına olanak tanır. Makro kodunuzun çalışması bittikten sonra ekran güncellemesini tekrar açabilirsiniz.
Alt Makro1() Application.Calculation = xlCalculationManual Application.ScreenUpdating = Yanlış 'Makro kodunuzu buraya yerleştirin Uygulama.Hesaplama = xlHesaplamaOtomatik Application.ScreenUpdating = Doğru Alt Alt
ScreenUpdating özelliğini tekrar True olarak ayarladıktan sonra, Excel otomatik olarak ekranın yeniden çizilmesini tetikler.
Excel penceresinin altında görünen Excel durum çubuğu, normalde Excel'deki belirli eylemlerin ilerlemesini görüntüler. Makronuz çok sayıda veriyle çalışıyorsa, durum çubuğu bazı kaynakları alacaktır.
Ekran güncellemesini kapatmanın durum çubuğu görüntüsünü kapatmadan ayrı olduğunu unutmamak önemlidir. Durum çubuğu, ekran güncellemesini devre dışı bıraksanız bile güncellenmeye devam edecektir. Herhangi bir durum çubuğu güncellemesini geçici olarak devre dışı bırakmak ve makronuzun performansını daha da iyileştirmek için Application.DisplayStatusBar özelliğini kullanabilirsiniz:
Alt Makro1() Application.Calculation = xlCalculationManual Application.ScreenUpdating = Yanlış Application.DisplayStatusBar = Yanlış 'Makro kodunuzu buraya yerleştirin Uygulama.Hesaplama = xlHesaplamaOtomatik Application.ScreenUpdating = Doğru Application.DisplayStatusBar = Doğru Alt Alt
Makroları, bir çalışma sayfası veya çalışma kitabı değiştiğinde Excel'e belirli kodu çalıştırmasını söyleyerek olay prosedürleri olarak uygulayabilirsiniz.
Bazen standart makrolar, bir olay prosedürünü tetikleyecek değişiklikler yapar. Örneğin, Sayfa1'deki birkaç hücreyi işleyen standart bir makronuz varsa, o sayfadaki bir hücre her değiştirildiğinde, Worksheet_Change olayı çalışırken makronuzun duraklaması gerekir.
Makronuz çalışırken Excel'e olayları yoksaymasını söylemek için EnableEvents özelliğini kullanarak başka bir performans artırma düzeyi ekleyebilirsiniz.
Makronuzu çalıştırmadan önce EnableEvents özelliğini False olarak ayarlayın. Makro kodunuzun çalışması tamamlandıktan sonra EnableEvents özelliğini tekrar True olarak ayarlayabilirsiniz.
Alt Makro1() Application.Calculation = xlCalculationManual Application.ScreenUpdating = Yanlış Application.DisplayStatusBar = Yanlış Application.EnableEvents = Yanlış 'Makro kodunuzu buraya yerleştirin Uygulama.Hesaplama = xlHesaplamaOtomatik Application.ScreenUpdating = Doğru Application.DisplayStatusBar = Doğru Application.EnableEvents = Doğru Alt Alt
Makronuz satır sayısını, sütun sayısını veya bir çalışma sayfasının sayfa düzenini her değiştirdiğinde, Excel, sayfada gösterilen sayfa sonlarını yeniden hesaplamak için zaman ayırmaya zorlanır.
Makronuzu başlatmadan önce sayfa sonlarını gizleyerek bu davranışı önleyebilirsiniz.
Sayfa sonlarını gizlemek için DisplayPageBreaks sayfa özelliğini False olarak ayarlayın. Makronuz çalıştıktan sonra sayfa sonlarını göstermeye devam etmek istiyorsanız, DisplayPageBreaks sayfa özelliğini tekrar True olarak ayarlayın.
Alt Makro1() Application.Calculation = xlCalculationManual Application.ScreenUpdating = Yanlış Application.DisplayStatusBar = Yanlış Application.EnableEvents = Yanlış Activesheet.DisplayPageBreaks = Yanlış 'Makro kodunuzu buraya yerleştirin Uygulama.Hesaplama = xlHesaplamaOtomatik Application.ScreenUpdating = Doğru Application.DisplayStatusBar = Doğru Application.EnableEvents = Doğru Activesheet.DisplayPageBreaks = Doğru Alt Alt
Makronuz büyük veri kaynakları içeren özet tabloları yönetiyorsa, dinamik olarak pivot alanları ekleme veya taşıma gibi şeyler yaparken düşük performansla karşılaşabilirsiniz.
Tüm pivot alanı değişiklikleri yapılana kadar pivot tablonun yeniden hesaplanmasını askıya alarak makronuzun performansını artırabilirsiniz. Yeniden hesaplamayı ertelemek için PivotTable.ManualUpdate özelliğini True olarak ayarlayın, makro kodunuzu çalıştırın ve ardından yeniden hesaplamayı tetiklemek için PivotTable.ManualUpdate özelliğini tekrar False olarak ayarlayın.
Alt Makro1() ActiveSheet.PivotTables("PivotTable1").ManualUpdate=Doğru 'Makro kodunuzu buraya yerleştirin ActiveSheet.PivotTables("PivotTable1").ManualUpdate=Yanlış Alt Alt
Unutulmamalıdır ki Macro Recorder sizin için VBA kodu yazarak zaman kazandırsa da her zaman en verimli kodu yazmaz. En iyi örnek, Macro Recorder'ın kayıt sırasında gerçekleştirdiğiniz herhangi bir kopyala-yapıştır eylemini nasıl yakaladığıdır.
Aracıyı keserek ve bir hücreden hedef hücreye doğrudan kopyalama gerçekleştirerek makrolarınıza hafif bir destek verebilirsiniz. Bu alternatif kod, panoyu atlamak ve A1 hücresinin içeriğini doğrudan B1 hücresine kopyalamak için Hedef bağımsız değişkenini kullanır.
Aralık("A1"). Hedefi Kopyala:=Aralık("B1")
Yalnızca değerleri kopyalamanız gerekiyorsa (biçimlendirme veya formüller değil), Kopyalama yönteminden hep birlikte kaçınarak performansı daha da artırabilirsiniz. Hedef hücrenin değerini, kaynak hücrede bulunanla aynı değere ayarlamanız yeterlidir. Bu yöntem, Kopyalama yöntemini kullanmaktan yaklaşık 25 kat daha hızlıdır:
Aralık("B1").Değer = Aralık("A1").Değer
Yalnızca formülleri bir hücreden diğerine kopyalamanız gerekiyorsa (değerler veya biçimlendirme değil), hedef hücrenin formülünü kaynak hücrede bulunan aynı formüle ayarlayabilirsiniz:
Aralık("B1").Formül = Aralık("A1").Formül
Makro kaydederken, genellikle aynı nesneyi bir kereden fazla değiştireceksiniz. Belirli bir nesne üzerinde tek seferde birkaç eylem gerçekleştirmek için With ifadesini kullanarak zamandan tasarruf edebilir ve performansı artırabilirsiniz.
Aşağıdaki örnekte kullanılan With ifadesi, Excel'e tüm biçimlendirme değişikliklerini bir kerede uygulamasını söyler:
Aralık ("A1") ile. Yazı Tipi .Kalın = Doğru .İtalik = Doğru .Underline = xlUnderlineStyleSingle İle bitmek
Eylemleri With ifadelerine bölme alışkanlığını edinmek, yalnızca makrolarınızın daha hızlı çalışmasını sağlamakla kalmaz, aynı zamanda makro kodunuzu okumayı da kolaylaştırır.
Makro Kaydedici, nesneler üzerinde işlem yapmadan önce nesneleri açıkça seçmek için Select yöntemini kullanmayı sever. Onlarla çalışmadan önce genellikle nesneleri seçmeye gerek yoktur. Aslında, Select yöntemini kullanmayarak makro performansını önemli ölçüde artırabilirsiniz.
Makrolarınızı kaydettikten sonra, Select yöntemlerini kaldırmak için oluşturulan kodu değiştirmeyi alışkanlık haline getirin. Bu durumda, optimize edilmiş kod aşağıdaki gibi görünecektir:
Sayfalar("Sayfa1").Aralık("A1").FormulaR1C1 = "1000" Sayfalar("Sayfa2").Range("A1").FormulaR1C1 = "1000" Sayfalar("Sayfa3").Range("A1").FormulaR1C1 = "1000"
Hiçbir şeyin seçilmediğini unutmayın. Kod, gerekli eylemleri uygulamak için yalnızca nesne hiyerarşisini kullanır.
Makrolarınızı hızlandırmanın başka bir yolu, kodunuzdaki çalışma sayfası verilerine başvurma sürenizi sınırlamaktır. Çalışma sayfasından veri almak bellekten almaktan her zaman daha az verimlidir. Yani, çalışma sayfasıyla tekrar tekrar etkileşime girmeleri gerekmiyorsa, makrolarınız çok daha hızlı çalışacaktır.
Örneğin, aşağıdaki basit kod, VBA'yı If deyiminde gerçekleştirilen karşılaştırma için gereken sayıyı almak için sürekli olarak Sheets(“Sayfa1”).Range(“A1”) öğesine dönmeye zorlar:
RaporAy için = 1 ila 12 If Range("A1").Value = ReportMonth O zaman MsgBox 1000000 / RaporAy Bitir Sonraki RaporAy
Çok daha verimli bir yöntem, Sheets(“Sheet1”).Range(“A1”) içindeki değeri MyMonth adlı bir değişkene kaydetmektir. Bu şekilde kod, çalışma sayfası yerine MyMonth değişkenine başvurur:
MyMonth'u Tamsayı Olarak Karartın MyMonth = Aralık("A1").Değer RaporAy için = 1 ila 12 MyMonth = ReportMonth ise MsgBox 1000000 / RaporAy Bitir Sonraki RaporAy
Çalışma sayfalarına doğrudan referans vermek yerine, bellekteki verilerle çalışmak için değişkenlerden yararlanmayı düşünün.
Bir nesnenin yöntemini veya özelliğini çağırırken, OLE bileşeninin IDispatch arabiriminden geçmesi gerekir. Bu OLE bileşenlerine yapılan çağrılar zaman alır, dolayısıyla OLE bileşenlerine yapılan başvuruların sayısını azaltmak makro kodun hızını artırabilir.
Nesne özelliklerinin veya yöntemlerinin çağrılması için genellikle Object.Method'un temsil yöntemi , yani "." kullanılır. Sembol, özellikleri ve yöntemleri çağırmak için kullanılır.
Bu nedenle yöntem veya özellik çağrılarının sayısı "." sembollerinin sayısına göre değerlendirilebilir. "." ne kadar azsa sembolü, kod ne kadar hızlı çalışırsa.
Örneğin aşağıdaki ifadede 3 sembol "." bulunmaktadır.
ThisWorkbook.Sheet1.Range("A1").Value = 100
Aşağıdaki ifadede yalnızca bir "." simgesi vardır.
Activewindow.Top = 100
İşte "." sembollerinin sayısını azaltmak için bazı püf noktaları. daha hızlı koşmak için.
İlk olarak, aynı nesneye tekrar tekrar başvurmanız gerektiğinde, çağrı sayısını azaltmak için nesneyi bir değişkene ayarlayabilirsiniz. Örneğin aşağıdaki kod, satır başına iki çağrı gerektirir.
ThisWorkbook.Sheets("Sheet1").Cells(1, 1) = 100
ThisWorkbook.Sheets("Sheet1").Cells(2, 1) = 200
ThisWorkbook.Sheets("Sheet1").Cells(3, 1) = 300
Sheets("Sheet1") nesnesine tekrar tekrar başvurulması gerektiğinden , önce sht değişkenine ayarlanabilir , böylece her kodun yalnızca bir kez çağrılması yeterli olur.
Set sht = ThisWorkbook.Sheets("Sheet1")
sht.Cells(1, 1) = 100
sht.Cells(2, 1) = 200
sht.Cells(3, 1) = 300
İkincisi, geçici bir sht değişkeni bildirmek istemiyorsanız, daha önce bahsedilen With ifadesini de kullanabilirsiniz. Aşağıdaki örnekte gösterildiği gibi:
With ThisWorkbook.Sheets("Sheet1")
.Cells(1, 1) = 100
.Cells(2, 1) = 200
.Cells(3, 1) = 300
End With
Üçüncüsü, çok sayıda döngü olduğunda özellikleri ve yöntemleri döngünün dışında tutmaya çalışın. Aynı nesnenin özellik değerini bir döngüde yeniden kullanırken, önce özellik değerini döngünün dışındaki belirli bir değişkene atayabilir ve daha sonra daha hızlı hız elde edebilecek şekilde döngüdeki değişkeni kullanabilirsiniz. Aşağıdaki örnekte gösterildiği gibi:
For i = 1 To 1000
ThisWorkbook.Sheets("Sheet1").Cells(1, 1) = Cells(1, 2).Value
ThisWorkbook.Sheets("Sheet1").Cells(2, 1) = Cells(1, 2).Value
ThisWorkbook.Sheets("Sheet1").Cells(3, 1) = Cells(1, 2).Value
Next i
Bu örnekteki her döngü, Cells(1,2) hücresinin Value özelliğini alır. Döngü başlamadan önce Cells(1.2)'in Value özelliğini bir değişkene atarsanız daha hızlı bir çalışma elde edersiniz. Aşağıdaki örnekte gösterildiği gibi:
tmp = Cells(1, 2).Value
For i = 1 To 1000
ThisWorkbook.Sheets("Sheet1").Cells(1, 1) = tmp
ThisWorkbook.Sheets("Sheet1").Cells(2, 1) = tmp
ThisWorkbook.Sheets("Sheet1").Cells(3, 1) = tmp
Next i
Yukarıdaki kod her döngüde ThisWorkbook.Sheets("Sheet1") öğesini çağırır. Çağrıyı döngünün dışındaki ThisWorkbook.Sheets("Sheet1") öğesine taşımak için With deyimini kullanarak bunu daha hızlı yapabilirsiniz . Aşağıdaki örnekte gösterildiği gibi:
tmp = Cells(1, 2).Value
With ThisWorkbook.Sheets("Sheet1")
For i = 1 To 1000
.Cells(1, 1) = tmp
.Cells(2, 1) = tmp
.Cells(3, 1) = tmp
Next i
End With
Yeni başlayanlar genellikle Variant türü değişkenleri kullanmayı tercih ederler; bu, daha az karmaşık olma avantajına sahiptir çünkü veriler Tamsayı veya Uzun veri türleri için çok büyükse, herhangi bir veri türü bellek taşması sorunu olmadan kullanılabilir. Ancak Varienmt türü veriler, belirtilen diğer türlere göre daha fazla ekstra bellek alanı gerektirir (Tamsayı verileri için 2 bayt, Uzun veriler için 4 bayt ve Variant verileri için 16 bayt), VBA, Variant türü verileri işlemek için diğer belirtilen türlere göre daha fazla zaman gerektirir. veri. Aşağıdaki örnekte gösterildiği gibi.
Sub VariantTest()
Dim i As Long
Dim ix As Integer, iy As Integer, iz As Integer
Dim vx As Variant, vy As Variant, vz As Variant
Dim tm As Date
vx = 100: vy = 50
tm = Timer
For i = 1 To 1000000
vz = vx * vy
vz = vx + vy
vz = vx - vy
vz = vx / vy
Next i
Debug.Print "Variant types take " & Format((Timer - tm), "0.00000") & " seconds"
ix = 100: iy = 50
tm = Timer
For i = 1 To 1000000
iz = ix * iy
iz = ix + iy
iz = ix - iy
iz = ix / iy
Next i
Debug.Print "Integer types take " & Format((Timer - tm), "0.00000") & " seconds"
End Sub
Yukarıdaki kodda, 8'den 13'e kadar olan satırlar, Variant değişkenlerinde 1 milyon toplama, çıkarma, çarpma ve bölme işlemi gerçekleştirir ve 17'den 22'ye kadar olan satırlar, Tamsayı değişkenlerinde 1 milyon toplama, çıkarma, çarpma ve bölme işlemi yapar. Bilgisayarımda Variant değişkeninin işlemi yaklaşık 0,09375 saniye sürerken, Integer değişkeninin işlemi yaklaşık 0,03125 saniye sürdü. Sonuçlar bilgisayardan bilgisayara farklılık gösterebilir ancak Variant değişkenleri Tamsayı değişkenlerinden önemli ölçüde daha yavaştır .
Bu nedenle, belirtilen veri türünü açıkça kullanabileceğiniz durumlarda Variant değişkenlerini kullanmaktan kaçınmanız önerilir .
Smartsheet, projeleri yönetmenize, iş akışları oluşturmanıza ve ekibinizle işbirliği yapmanıza olanak tanıyan dinamik bir çalışma platformudur.
SharePoint, çeşitli iş akışı uygulamalarını, veritabanlarını ve diğer web bileşenlerini "listeleme"nin yanı sıra İş gruplarının birlikte çalışmasını kontrol etmek için güvenlik özelliklerini kullanan web tabanlı bir işbirliği sistemidir.
Van Nien Takvimi, telefonunuzda ay-güneş tarihini hızlı bir şekilde görmenize yardımcı olan ve böylece önemli işlerinizi düzenlemenize yardımcı olan, telefonunuzda bir takvim görüntüleme uygulamasıdır.
Microsoft Outlook, Microsoft Corporation tarafından geliştirilen bir iş ve verimlilik uygulamasıdır.
ClickUp, herhangi bir işletme için en yüksek puan alan üretkenlik platformlarından biridir. Google, Booking.com, San Diego Padres ve Uber gibi büyük işletmelerin tümü işyeri verimliliğini artırmak için ClickUp'ı kullanıyor.
PDF, metin belgelerini okumak, oluşturmak ve göndermek için yaygın olarak kullanılan bir format haline geldi. Buna karşılık, bu tür dokümantasyon için kullanılan programların sayısı da arttı. PDF-XChange Viewer, giderek artan sayıda PDF görüntüleyici arasında yer alıyor.
Apache OpenOffice, özellikle Excel, PowerPoint ve Word'de Microsoft 365'e rakip olabilecek eksiksiz bir Office uygulamaları paketi sunar. Projelerinizi daha etkili bir şekilde yönetmenize olanak tanır ve çeşitli dosya formatlarını destekler.
iTaxViewer yazılımı günümüzün en popüler XML dosyası okuma yazılımıdır. Bu yazılım Vergi Genel Müdürlüğü'nün XML formatındaki elektronik vergi beyannamelerini okumaya yönelik bir uygulamadır.
Nitro PDF Reader, çoğu insanın her gün PDF belgeleriyle gerçekleştirdiği tüm temel görevleri kapsayan kullanışlı bir PDF düzenleyicidir.
Foxit Reader öncelikle bir PDF okuyucudur ve ayrıca PDF dosyaları oluşturmanıza, imzalamanıza, düzenlemenize ve açıklamalar eklemenize olanak tanır. İşletim sistemlerinde çalışır, Microsoft Office paketinde çeşitli programlar için eklentiler vardır.