Wa'alaikumussalam wr wb
Hai Nang,
Biasanya hal seperti ini terjadi jika ada background process yang bekerja
saat kode VBA sedang dalam proses.
Biasanya juga, mengatur Application.ScreenUpdating di set False di awal
proses kemudian mengembalikannya ke True sebelum proses selesai (mencapai
end sub), dapat mencegah background process seperti itu. Lagi pula, set
screenupdating juga dapat mempercepat proses kerja VBA karena mencegah
redraw layar.
Andai penggunaan screenupdating tidak menyelesaikan masalah, maka perlu
dicari penyebabnya. Misal, jika penyebabnya adalah formula yang berantai
panjang, maka dapat menggunakan setting calculation untuk di manual lebih
dulu, baru di automatic lagi sesaat sebelum proses selesai. Setting
calculation ini juga dapat mempercepat kerja VBA bila VBA tidak membutuhkan
kalkulasi Excel.
Terkadang, event di sebuah worksheet atau workbook yang membuat proses
berbelok sejenak tapi tidak kembali ke tempat semula. Properti EnableEvents
yang di set False sebelum proses dan dikembalikan True sesaat akan selesai
dapat mencegah hal ini. Bila events nya adalah milik sebuah activex
control, maka perlu cara yang sedikit berbeda untuk mencegah bekerjanya
events.
Terkadang juga, background process menghasilkan pesan sesuatu di layar yang
membutuhkan respon, sehingga proses terhenti. Untuk hal ini, properti
DisplayAlerts yang di set False dan dikembalikan True diakhir proses dapat
digunakan.
Jadi, bila sering dilihat, biasanya ada blok yang berbunyi begini di awal
prosedur :
with application
.screenupdating=false
.enableevents=false
.displayalerts=false
.calculation=xlcalculationmanual 'KHUSUS jika kalkulasi oleh Excel
tidak dibutuhkan dalam proses VBA
end with
dan diakhir proses (sebelum End Sub atau semacamnya) ada blok pengaktifan
kembali seperti :
with application
.calculation=xlcalculationautomatic 'KHUSUS jika di atas ada
pengaturan calculation ke manual
.enableevents=false
.screenupdating=false
.displayalerts=falseend with
end with
Dua blok itu bukan untuk mempercepat proses VBA yang terkadang tidak
dibutuhkan.
Tapi 2 blok itu memiliki fungsi khusus yang sekilas telah dijabarkan di
atas sana.
Karena fungsi-fungsi khusus tersebutlah maka bisa dikatakan proses menjadi
lebih cepat.
Jadi, sekali lagi, 2 blok itu BUKAN untuk mempercepat kerja VBA, TETAPI,
karena 2 blok itu menonaktifkan hal-hal yang bisa menganggu proses maka
proses VBA menjadi lebih cepat.
----------
kalau hal di atas masih belum bisa menyelesaikan masalah, berarti perlu
dicoba *ditambahkan *proses untuk melokalisir kerja. Yaitu dengan melakukan
proses dari luar sheet tersebut. Misalnya dengan mengaktifkan sheet lain
lebih dulu, barulah nanti kembali ke sheet tersebut saat selesai.
----------
oh iya, conditional formatting termasuk di dalam background process. Tapi
kalau masalahnya karena conditional formatting bisa diselesaikan dengan
screenupdating.
Coba deh dicek lagi dan tidak ada ruginya mengatur lingkungan kerja dengan
2 blok di atas.
Wassalamu'alaikum wr wb
Kid
On Wed, Jun 15, 2016 at 8:48 AM, Nang Agus [email protected]
[belajar-excel] <[email protected]> wrote:
>
>
> Asalamualaikum wrahmatullah,
>
> Kepada Member B-Excel.
>
> Saya membuat sebuah perintah VBA. Perintah tersebut dapat dijalankan dari
> sheet1 namun tidak dapat dijalankan dari sheet6, Manakah penulisan yang
> salah?
>
> Sub Etung() Dim kl As String Dim i As Integer Dim baris As Integer Dim a As
> Integer Dim it As Integer Dim z As Integer Dim itu As Integer baris =
> Sheet1.Range("A10000").End(xlUp).row z = 7
> Sheet1.Range("Q9:Q1000").ClearContents For i = 9 To baris it = 0 For a =
> 1 To 11 If Sheet1.Cells(i, a + 3) < Sheet3.Cells(29 + a, 5 +
> kelase(Sheet1.Cells(i, 1))) Then it = it + 1 Else End If Next a If
> (it > 3 And Len(Sheet1.Cells(i, 3)) > 2) Then itu = itu + 1
> Sheets("kopi").Cells(i,
> 17) = z & Format(itu, "00") Else If (Sheet1.Cells(i, 15) <
> Sheet3.Cells(41, 5 + kelase(Sheet1.Cells(i, 1))) And Len(Sheet1.Cells(i,
> 3)) > 2) Then itu = itu + 1 Sheets("kopi").Cells(i, 17) = z &
> Format(itu, "00") Else End If End If Next i End Sub
> atas perhatiannya diucapkan terima kasih.
> Wasalamualaikum warahmatullah.
>
> NangAgus
>
>
>