coba ubah deklarasi fungsi-nya menjadi seperti ini:

#If VBA7 And Win64 Then
    Private Declare PtrSafe Function QueryPerformanceCounter Lib
"kernel32.dll" (ByRef lpPerformanceCount As LARGE_INTEGER) As Long
#Else
    Private Declare Function QueryPerformanceCounter Lib "kernel32.dll"
(ByRef lpPerformanceCount As LARGE_INTEGER) As Long
#End If

semoga bisa berjalan di semua versi excel baik 32-bit maupun 64-bit

Wassalam,

-Miss Jan Raisin-


Pada 11 April 2013 23.37, lkm jktind <[email protected]> menulis:

> **
>
>
> Pak Kid.
>
> File yg bapak kirimkan di tempat . ada errornya
>
> excel yg aku gunakan ver 2010.  64bit
> OS nya : win 7
>
> Bagaimana cara untuk memperbaikinya ?
>
>
>
> Lukman
>
>
>
> 2013/4/11 Mr. Kid <[email protected]>
>
>  **
>>
>>
>> Yup... penggunaan enum ataupun indeks akan lebih cepat dibanding inputan
>> untuk parameter yang berupa string.
>> Pada komputer sekarang, mestinya selisih ini tidak akan sampai 200 tick.
>> Perkiraannya hanya sekitar kurang dari 10 tick.
>> Jika terjadi perbedaan yang lebih dari 10 tick, bisa jadi karena proses
>> fungsinya yang bekerja lambat.
>>
>> Misal pada :
>> Columns("A:A").Find(vbNullString).Select
>> dan
>> Columns(1).Find(vbNullString).Select
>>
>> Perbedaan tick akibat indeks 1 maupun string input parameter "A:A" tidak
>> akan lebih dari 10 tick (tetap perkiraan wakakaka)
>> Sedang dampak dari performa fungsi Find (algoritma dalam fungsi Find)
>> cenderung lebih dominan. Jika pada jumlah record yang banyak, akan tampak
>> penurunan performa secara signifikan.
>> Proses sisi Columns tetaplah hanya 1 kali proses. Proses yang banyak ada
>> didalam fungsi Find.
>>
>> Tentu saja hal ini tidak akan lepas dari pengaruh lingkungan
>> (proses-proses lain dalam lingkungan [windows]).
>> Misal pada kasus :
>> Cells(Rows.Count, 1).End(3).Offset(1).Select
>> dan
>> cells(rows.count,1).end(xlup).offset(1).select
>>
>> secara logika, nilai 3 dan xlUp bukanlah merujuk kepada nilai
>> sesungguhnya. Nilai 3 adalah indeks panah ke atas keyboard, dan xlUp adalah
>> enum dari direction yang bernilai -4162. Penggunaan nilai 3 dan xlUp akan
>> mengalami proses penerjemahan menjadi nilai konstanta yang sesuai dengan
>> kebutuhan methods End. Jadi selisihnya pastilah tidak akan lebih dari 5
>> tick (bahkan mungkin 1 atau 2 tick saja selisihnya).
>> Bahkan penggunaan nilai -4162 secara langsung pun tidak akan berpengaruh
>> besar. Andai lebih cepat pun kiranya sekitar 1 atau 2 tick juga.
>> Pada saat record sangat banyak, maka proses UP ke nilai data terakhir
>> akan menjadi semakin pendek. Pada jumlah record yang sedikit, proses UP
>> akan lebih panjang dan jumlah tick akan meningkat.
>> Jadi antara kedua script di atas, akan relatif dipengaruhi oleh :
>> 1. kondisi lingkungan (proses-proses lain yang diproses Windows, sehingga
>> terjadi antrian thread dalam prosesor)
>> 2. jumlah record yang menyebabkan perbedaan jarak saat proses UP.
>>
>> File terlampir bisa dicoba.
>> 1. Ketika range J4:J11 diisi dengan opsi_id yang bermacam-macam
>> 2. Ketika range J4:J11 diisi dengan sebuah opsi_id kemudian RUN, lalu
>> diganti opsi_id lain dan di-RUN untuk membandingkan antar opsi_id
>>
>> Tapi yang jelas, proses terhadap string pastilah lebih lambat dibanding
>> terhadap data numerik, apalagi data numerik dengan tipe data yang pas
>> dengan bit Operating System yang digunakan. Untungnya, kecepatan prosesor
>> saat ini, akan memberi perbedaan ketika jumlah prosesnya sangat buanyak
>> sekali.
>>
>> Mungkin gitu kali ya... kalau salah, mohon dikoreksi ya...
>>
>> Wassalamu'alaikum Wr. Wb.
>> Kid.
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>  2013/4/11 summonery <[email protected]>
>>
>>> **
>>>
>>>
>>> Proses jadi lebih cepat dikarenakan penyampaian menggunakan index atau
>>> enumerasinya lebih cepat ditangkap oleh Excel ketimbang penyampaian
>>> menggunakan teks.
>>>
>>> coba juga,
>>> Cells(Rows.Count, 1).End(3)(2).Select
>>>
>>> *O iya, diluar asumsi kasus pak Hendrik, mungkin mis Jan tertarik
>>> bagaimana perbandingan performanya apabila: misal, data dati row1 s.d.
>>> row1000000 kesemuanya (kita ekstrimkan) merupakan nullstring. Kita ketik di
>>> cell A1 formula ="" kemudian copy paste sampai row1000000, setelah itu
>>> semuanya divaluekan, copypastespecial: value row1:row1000000.*
>>> *
>>> *
>>> *
>>> *
>>> >semoga bermanfaat
>>>
>>>
>>> --- In [email protected], Jan Raisin <miss.jan.raisin@...>
>>> wrote:
>>> >
>>> > ini adalah hasil percobaan dengan keempat script
>>> >
>>> > script 1 dari pak hendrik
>>> > script 2 dari mr kid
>>> > script 3 & 4 dari pak Anton
>>> >
>>> > hasilnya sbb:
>>> >
>>> > cara 1 : Columns("A:A").Find(vbNullString).Select Alamat akhir : $A$4
>>> > Waktu : 0 | 4877
>>> > cara 2 : cells(rows.count,1).end(xlup).offset(1).select Alamat akhir :
>>> $A$4
>>> > Waktu : 0 | 1435
>>> > cara 3 : Columns(1).Find(").Select Alamat akhir : $A$4 Waktu
>>> > : 0 | 2371
>>> > cara 4 : Cells(Rows.Count, 1).End(3).Offset(1).Select Alamat akhir :
>>> $A$4
>>> > Waktu : 0 | 589
>>> >
>>> > ternyata yang paling cepat adalah script nomor 4 dari pak Anton,
>>> > padahal scriptnta mirip dengan script nomor 2 dari mr kid tapi
>>> perbedaan
>>> > waktunya bisa hampir sepertiganya sendiri.
>>> >
>>> > Bisa tolong dijelaskan oleh pak Anton atau mr Kid?
>>> >
>>> > Wassalam,
>>> >
>>> > -MJR-
>>> >
>>>
>>>
>>
>  
>

Kirim email ke