Terima kasih Mr Kid, di atas pencerahannya.
Saya belum sempat mencoba lagi, mudah2an akan bermanfaat juga buat member
yang lain.

Semoga Allah memberi keberkatan di atas bantuan anda. Amin.


-Mansor

2013/3/27 Mr. Kid <mr.nm...@gmail.com>

> **
>
>
> Hai Mansor,
>
> Moga-moga file terlampir bisa digunakan dulu sembari menunggu proses yang
> lebih simpel dari BeExceller.
>
> ------------------
> File terlampir juga bisa diunduh di :
> https://www.box.com/s/39t9w4t4467ahr2dty54
> Untuk saat ini, file terlampir mungkin tidak bisa dicoba secara langsung
> di semua komputer. Tetapi bisa diatur untuk mencoba menulis ke sebuah
> textbox tertentu di suatu window tertentu (di aplikasi apa saja selama
> window nya punya caption), kemudian menekan tombol tertentu juga.
> File terlampir berisi 2 buah file, yaitu :
> 1. re-Makro untuk mencetak dengan printer yang ada password.xlsm
> >> berisi contoh penggunaan file pengirim perintah ke window lain (milik
> aplikasi apa saja)
>
> 2. vba_with_api_sendmessage.xlsm
> >> berisi runtime untuk mengirim perintah ke window tertentu (milik
> aplikasi apa saja). Pada komputer yang security macro bukan Enable harus
> memastikan bahwa workbook ini ketika dibuka segera di beri ijin (di-enable)
> untuk memanfaatkan VBA.
>
> Syarat dan ketentuan berlaku.
> ------------------
>
> >> selayang kasus
> Pada kasus ini, ada sebuah printer (LAN Printer) yang dibatasi aksesnya
> (melalui tab Security si printer oleh Admin [misalnya]).
> User dari departemen lain tidak bisa menggunakan printer tersebut sebelum
> mengisi suatu kode tertentu.
> Setiap ada proses yang ingin menggunakan printer tersebut dan komputer
> user bukan dari departemen tersebut, maka akan muncul sebuah window untuk
> mengisi kode tertentu tersebut.
>
> >> informasi dari gambar di file nomor 1
> Window yang muncul ini memiliki caption berbunyi Invalid Department Code.
> Caption ini akan menjadi titik awal proses nantinya.
> Pada window tersebut, terdapat banyak control, seperti control untuk icon
> beserta teksnya, control TextBox untuk penulisan kode, control
> CommandButton untuk konfirmasi tindakan oleh user.
> Textbox tidak memiliki caption, dan untungnya hanya ada 1 textbox dalam
> window.
> CommandButton ada 2 bijik. Yang pokok adalah yang memiliki caption
> berbunyi Continue (setidaknya ada penggalan kata Continue disana).
>
> >> proses mengisi password ke textbox disertai menekan tombol Continue
> Langkahnya kira-kira :
> 1. mendapatkan window dengan caption berbunyi Invalid Department Code
> 2. loop semua control yang ada dalam window yang ditemukan di nomor 1
> 3. dapatkan caption setiap control
> 4. jika bertemu control yang tidak punya caption, maka dicobalah mengirim
> teks password. Kalau sukses ya sukur, kalau gagal ya dicoba cari control
> lain.
> 5. jika bertemu control yang punya caption ada penggalan tulisan berbunyi
> Continue, maka control ini disimpan untuk ditekan nanti ketika proses loop
> selesai.
> 6. setelah proses loop selesai, maka cek keberadaan si control ber-caption
> Continue tadi. Kalau ada, maka kirim perintah untuk menekannya.
>
> Seluruh object dalam windows memiliki ID yang unique. ID ini sering
> disebut window handler yang divariabelkan secara umum dengan hWnd.
> Proses nomor 1.
> diperlukan proses pencarian window berdasar nama captionnya. Fungsi API
> yang bisa digunakan salah satunya adalah FindWindow
> Deklarasinya berbunyi :
> Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal
> lpClassName As String, ByVal lpWindowName As String) As Long
>
> Proses nomor 2.
> diperlukan fungsi loop setiap window. Fungsi API yang bisa digunakan
> adalah EnumChildWindows.
> Deklarasinya berbunyi :
> Declare Function EnumChildWindows Lib "user32.dll" (ByVal hWndParent As
> Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
>
> Penggunaan fungsi Enum membutuhkan rujukan pointer (Address of). Untuk
> ini, dibuatlah sebuah fungsi yang bisa menjadi penyimpan informasi selama
> proses.
> Fungsi ini sering disebut wndproc. Pada file diatas, wndproc dibuat dengan
> nama fungsi LoopSetiapControl yang deklarasinya berupa :
> Function LoopSetiapControl(ByVal hwnd As Long, lParam As Long) As Long
>
> Proses nomor 3.
> diperlukan fungsi untuk mendapatkan jumlah karakter caption
> (GetWindowTextLength) dan bunyi caption (GetWindowText).
> Deklarasinya :
> Declare Function GetWindowTextLength Lib "user32.dll" Alias
> "GetWindowTextLengthA" (ByVal hwnd As Long) As Long
> Declare Function GetWindowText Lib "user32.dll" Alias "GetWindowTextA"
> (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
>
> Proses nomor 4.
> untuk mengirim perintah menulis sesuatu berdasar suatu string menggunakan
> fungsi SendMessageByString
> Deklarasinya :
> Declare Function SendMessageByString Lib "user32" Alias "SendMessageA" ( _
>                                  ByVal hwnd As Long, ByVal wMsg As Long,
> ByVal wParam As Long, ByVal lParam As String) As Long
>
> Proses nomor 6.
> untuk mengirim perintah menekan suatu tombol bisa dengan fungsi SendMessage
> deklarasinya :
> Declare Function SendMessage Lib "user32" Alias "SendMessageA" ( _
>                                 ByVal hwnd As Long, ByVal wMsg As Long,
> ByVal wParam As Long, lParam As Any) As Long
>
>
> >> Kenapa diletakkan pada file terpisah ?
> Pada kasus ini, kebutuhan penggunaan proses nomor 1 sampai 6 adalah saat
> melakukan proses print. Artinya, ketika ada kegiatan print barulah si
> window Invalid bla tersebut muncul dan bisa diproses. Pada kegiatan print
> (printout), proses akan terhenti sampai user melakukan sesuatu. Untuk
> menghindari hal ini, maka proses nomor 1 sampai 6 diletakkan pada workbook
> terpisah di instansi Excel yang terpisah pula.
>
> Karena proses nomor 1 sampai 6 tergantung pada ditemukannya sebuah window,
> maka perlu menjalankan proses nomor 1 sampai 6 secara berkala. Untuk
> kebutuhan ini, maka digunakan methods OnTime milik Excel dengan mengatur
> waktu antar proses adalah setiap 1 detik. Kegiatan dengan OnTime dilakukan
> sejak
>
> >> Bagaimana mengaktifkan proses nomor 1 sampai 6 tersebut
> Pada workbook kerja, sesaat sebelum proses utama dilakukan (proses utama
> kasus ini adalah printing dengan methods PrintOut) harus didahului dengan
> pembentukan instansi Excel baru dan pada instansi baru itu dilakukan
> pembukaan workbook yang berisi proses nomor 1 sampai 6.
> Jangan lupa untuk menutup instansi baru (beserta workbook yang terbuka
> disana) ketika proses utama telah selesai.
>
> Moga-moga gak banyak errornya ya...
>
> Wassalam,
> Kid.
>
>
>
> 2013/3/26 Mansor <dbpermatas...@gmail.com>
>
>> **
>>
>>
>>
>>
>> Dear teman2 BeExcel,
>>
>>  Bagaimana  makronya , untuk mencetak dengan printer  yang ada password.
>>
>>  Setiap halaman yang dicetak harus dimasukkan passwordnya, pasti nya
>> kerja jadi ribet.
>>
>>  Kalau ada 100 halaman yang mau dicetak, kalau hanya sekali diminta
>> password masih ok, tapi jangan setiap halaman. Mungkin perlu modifikasi
>> kode yang ditulis oleh Mr Kid.
>>
>>
>>
>>   Public Sub mencetak()
>>
>>     Dim lPage As Long
>>
>>     If Range("o2").Value > 0 Then
>>
>>         Range("o3").Value = 1
>>
>>         For lPage = 1 To Range("o2").Value
>>
>>             ActiveSheet.Calculate
>>
>>             Range("a1:j69").PrintOut
>>
>>             Range("o3").Value = lPage + 1
>>
>>             If MsgBox("Page : " & lPage + 1 & vbCrLf & "Print ?",
>> vbYesNo + vbQuestion, "Cetak") = vbNo Then
>>
>>                 Exit For
>>
>>             End If
>>
>>         Next lPage
>>
>>     End If
>>
>> End Sub
>>
>>
>> Bisakah, selepas Printout.Password="6932"      ????
>>
>>
>> File seperti dilampirkan
>>
>>
>>
>>    Terima kasih.
>>
>> -Mansor
>>
>>
>  
>

Kirim email ke