DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
Altın Üyelik Hakkında Bilgi
Kağıt ayarını yatay yapıp sonra userformu yazdırınca istediğiniz gerçekleşmiyormu?userformumun genişliği a4 kağıdından büyük printform komutuyla yazdırdığımda formun yarısı yazılıyor. hani excel ktabında sayfa yapısı bölünda yatay dikey varya ona benzer formu yatay yazdırabilirmiyiz.
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal _
bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Const KEYEVENTF_KEYUP = &H2
Private Const VK_SNAPSHOT = &H2C
Private Const VK_MENU = &H12
Dim wb As Workbook
Dim sh As Worksheet
'
CommandButton1.SetFocus
AltPrintScreen
DoEvents
'
Application.ScreenUpdating = False
'
Set wb = Workbooks.Add(template:=xlWBATWorksheet)
Set sh = wb.Sheets(1)
'
sh.Paste
'
With sh.PageSetup
.FitToPagesTall = 1
.FitToPagesWide = 1
.Orientation = xlLandscape
.Zoom = False
End With
'
sh.PrintOut
'
wb.Close False
'
Application.ScreenUpdating = True
'
Set sh = Nothing
Set wb = Nothing
Private Sub AltPrintScreen()
keybd_event VK_MENU, 0, 0, 0
keybd_event VK_SNAPSHOT, 0, 0, 0
keybd_event VK_SNAPSHOT, 0, KEYEVENTF_KEYUP, 0
keybd_event VK_MENU, 0, KEYEVENTF_KEYUP, 0
End Sub
.Orientation = xlLandscape
.Orientation = xlPortrait
Sn sergions
Merhaba,
Ben de Userform'u yatay yazdırmanın yollarını ararken cevabı burada bulamayınca yabancı bir VBA sitesinde de arama yaptım. Orada bulduğum çok hoş bir çözümü sizlerle paylaşayım.
Aşağıdaki kodları Userform'un kod kısmının başına yerleştiriyoruz.
Kod:Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal _ bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long) Private Const KEYEVENTF_KEYUP = &H2 Private Const VK_SNAPSHOT = &H2C Private Const VK_MENU = &H12
Ayrıca "Yazdır" butonu olarak oluşturduğunuz CommandButton'a da aşağıdaki kodu ekliyorsunuz.
Kod:Dim wb As Workbook Dim sh As Worksheet ' CommandButton1.SetFocus AltPrintScreen DoEvents ' Application.ScreenUpdating = False ' Set wb = Workbooks.Add(template:=xlWBATWorksheet) Set sh = wb.Sheets(1) ' sh.Paste ' With sh.PageSetup .FitToPagesTall = 1 .FitToPagesWide = 1 .Orientation = xlLandscape .Zoom = False End With ' sh.PrintOut ' wb.Close False ' Application.ScreenUpdating = True ' Set sh = Nothing Set wb = Nothing
Son olarak aşağıdaki kodu da Userform'a ekliyoruz.
Kod:Private Sub AltPrintScreen() keybd_event VK_MENU, 0, 0, 0 keybd_event VK_SNAPSHOT, 0, 0, 0 keybd_event VK_SNAPSHOT, 0, KEYEVENTF_KEYUP, 0 keybd_event VK_MENU, 0, KEYEVENTF_KEYUP, 0 End Sub
"Yazdır" butonuna bastığınızda kod aktif UserForm için "PrintScreen" komutu ile ekran görüntüsünü kopyalayıp geçici bir excel dosyası açacak ve
Userform'u oraya kopyalayacak, ardından yazdırma ayarlarında sayfaya sığdırma yapılacağı için Userform'unuz tek sayfada yazıcıdan çıkacaktır.
Bu arada;
YerineKod:.Orientation = xlLandscape
kullanarak çıktıyı yatay yerine dikey de alabilirsiniz. Ama burada sorulan yatay çıktı almak olduğu için şu anki şekilde kalması sizin sorununuzu çözecektir.Kod:.Orientation = xlPortrait
Kolay Gelsin.
Not: Aradan neredeyse 6 ay geçtiğini biliyorum. Belki hala bu sorunun çözümünü arayanlar vardır diye düşündüm.
Kaynak: www.mrexcel.com
(Adminler URL verilmesini uygun bulmazsa kaynak bilgisini silebilirler)
Hocam benimde 64 bitte kullanmam gerekiyor konu eski ama yardımcı olma şansınız varmıwin 10 office2013 64 bit kullanıyorum
Private Declare PtrSafe Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Görseldeki kırmızı yazılan yerdeki "Declare" ifadesinden sonra "PtrSafe" ifadesini ekleyerek çözüm buldum.
Hocam 32 bitte sorun yok çalışıyor fakat 64 bitte hata veriyor#5 nolu mesajda nasıl yapacağınız tarif edilmiş. Neresini yapamadınız?