Hai Roni,

Kenapa yang di-print adalah userform ? Bukankah bisa disusun dengan
worksheet agar lebih luwes.
Jadi, hasil pengolahan dengan userform dibuatkan sebuah worksheet untuk
print berisi layout seperti userform.
Karena kalau print userform dalam orientasi kertas landscape, maka si
userform di print screen (pakai ALT supaya hanya userform yang ter-capture)
lalu di hasil print screen di paste ke sebuah worksheet kosong yang baru,
kemudian worksheet berisi picture shape tadi diatur page setupnya, dan bila
perlu diatur ukuran shape-nya
barulah di sheet tersebut di printout, diakhir dengan delete sheet tersebut.

Urutan proses dalam prosedur juga mengikuti alur di atas.

Untuk BeExceller semua,
proses penekanan tombol keyboard lebih luwes dilakukan dengan windows api
keybd_event,
terutama ketika membutuhkan tombol PrtScr yang tidak bisa diatur dengan
mudah menggunakan Application.SendKeys

Contohnya begini :
    'deklarasi variabel kerja
    Dim shtTmp As Worksheet, shtApp As Worksheet, shpFrm As Shape
    Dim dblScT As Double, dblScL As Double

    'init semua bahan
    Application.DisplayAlerts = False
    Set shtApp = ActiveSheet
    Set shtTmp = ThisWorkbook.Sheets.Add    'tambah sheet baru
    dblScT = Me.ScrollTop
    dblScL = Me.ScrollLeft

    'atur tampilan yang akan di ALT+PRTSCR
    Me.ScrollTop = 0
    Me.ScrollLeft = 0
    Application.CutCopyMode = False    'clear clipboard dari range yang
ter-copy sebelumnya

    'proses ALT+PRTSCR (tersimpan di clipboard)
    keybd_event 164, 0, 1, 0   'pencet ALT (klik tombol) jangan dilepaskan
    keybd_event 44, 0, 1, 0    'pencet PRTSCR (klik tombol) jangan
dilepaskan
    keybd_event 44, 0, 3, 0    'lepas PRTSCR yang tadi dipencet (2 :
extended + 1 : klik tombol)
    keybd_event 164, 0, 3, 0   'lepas ALT yang tadi dipencet (2 : extended
+ 1 : klik tombol)
    DoEvents                   'lakukan seluruh events dalam antrian, dan
tangkap event yang baru
    Application.Wait Now + TimeValue("00:00:01")   'beri waktu 1 detik agar
perintah keyboard di proses, atur waktunya

    'paste hasil ALT+PRTSCR ke worksheet dan print
    shtTmp.Paste                     'paste isi clipboard ke worksheet
(biasanya ke activecell di sheet tersebut, tapi kasus ini tidak peduli
lokasinya)
    Set shpFrm = shtTmp.Shapes(1)    'simpan shapes ke-1 yang ada di sheet
tersebut ke variabel shape
    '--> atur pagesetup worksheet disini <--'
    'mulai dari ubah kertas, margin, orientasi, dan sebagainya (lihat
dialog page setup)
    'lalu attur ukuran shape agar mengikuti perbandingan kertas
    'akhiri dengan printout/printpreview sheet
    '---------------------------------------'

    'kembalikan area kerja ke keadaan semula
    Me.ScrollTop = dblScT
    Me.ScrollLeft = dblScL
    shtTmp.Delete
    shtApp.Activate
    Application.DisplayAlerts = False

Silakan diatur

Regards,
Kid






On Wed, Dec 6, 2017 at 4:38 PM, y.ron...@yahoo.com [belajar-excel] <
belajar-excel@yahoogroups.com> wrote:

>
>
> Dear Rekan-Rekan,
>
>
> Mohon Bantuannya, saya mau print untuk userform dengan kertas landscape.
> saya pake office 2010 (64 bit). Saya peke code ini tidak bisa, mohon di
> koreksi.
>
> Option Explicit
>
>
>
> Private Declare PtrSafe Sub keybd_event Lib "user32" ( _
>
>                                      ByVal bVk As Byte, ByVal bScan As
> Byte, _
>
>                                      ByVal dwFlags As Long, ByVal
> dwExtraInfo As Long)
>
>
>
> Private Const VK_SNAPSHOT    As Long = &H2C '44
>
> Private Const VK_LMENU As Long = &HA4 '164
>
> Private Const KEYEVENTF_KEYUP As Long = 2
>
> Private Const KEYEVENTF_EXTENDEDKEY As Long = 1
>
>
> Private Sub CommandButton1_Click()
>
>
> End Sub
>
> Dim sngScrollTop As Single
>
> Dim sngScrollHt As Single
>
> Dim sngLt As Single
>
> Dim sngTp As Single
>
> Dim sngHt As Single
>
>         With Me
>
>              sngScrollTop = .ScrollTop
>
>              sngScrollHt = .ScrollHeight
>
>              sngLt = .Left
>
>              sngTp = .Top
>
>              sngHt = .Height
>
>              .Left = 0
>
>              .Top = 0
>
>              .Height = .ScrollHeight
>
>              .ScrollTop = 0
>
>              DoEvents
>
>                 keybd_event VK_LMENU, 0, KEYEVENTF_EXTENDEDKEY, 0&
>
>              keybd_event VK_SNAPSHOT, 0, KEYEVENTF_EXTENDEDKEY, 0&
>
>              keybd_event VK_SNAPSHOT, 0, KEYEVENTF_EXTENDEDKEY Or
> KEYEVENTF_KEYUP, 0&
>
>              keybd_event VK_LMENU, 0, KEYEVENTF_EXTENDEDKEY Or
> KEYEVENTF_KEYUP, 0
>
>              DoEvents
>
>                 Selection.Paste
>
>              sngScrollTop = .ScrollTop
>
>              sngScrollHt = .ScrollHeight
>
>              .Height = sngHt
>
>              .ScrollHeight = ScrollHeight
>
>              .ScrollTop = sngScrollTop
>
>              .Left = sngLt
>
>              .Top = sngTp
>
>      End With
>
>
> 
>

Kirim email ke