• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

userformu yatay yazdırma

  • Konbuyu başlatan Konbuyu başlatan recep
  • Başlangıç tarihi Başlangıç tarihi
Katılım
22 Nisan 2005
Mesajlar
245
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.
 
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.

Kağıt ayarını yatay yapıp sonra userformu yazdırınca istediğiniz gerçekleşmiyormu?
 
denedim olmadı.
şöyle birşey yapıyorum.
print screen tşu ile ekranın fotografonı çekiyorum. fotoğrafı painte atıp çeviriyorun ancak öyle yazıyor. her çıktı için bunu yapmak bayağı zor oluyor
 
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;
Kod:
    .Orientation = xlLandscape

Yerine
Kod:
    .Orientation = xlPortrait

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.

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)

 
Kaynak: www.mrexcel.com
(Adminler URL verilmesini uygun bulmazsa kaynak bilgisini silebilirler)

Sn sergions

Bizler bugüne kadar gösterilen bir kaynağın linkine hiçbir zaman karşı olmadık aksine kaynağın mutlaka belirtilmesinin gerekliliğini savunduk. Bu sebeple linki görünmesin diye en küçük fontta yazmanızada gerek yok, ben linki burada bir kez daha yazıyorum.

www.mrexcel.com
 
Sayın leventm,

Siz de takdir edersiniz ki internet ortamındaki akademik veya eğlence amaçlı forumların bir çoğunda başka sitelerin referans verilmesine izin verilmeyebiliyor. Bu sitenin yaklaşımını hatırlamadığım için tüm forumlarda olduğu gibi bu forumdaki dış başvurulara da yukarıdaki gibi bir dip not düşerim.

Küçük font kullanılması da kitaplardan gelen bir format takıntısından ibarettir ve olması gerekenin de bu olduğunu düşünüyorum.

İyi çalışmalar.


Not: Konu başlığındaki harf hatasını düzeltebilir misiniz?
 
Emeğinize sağlık bende tam böyle bir şey arıyordum .
TEŞEKKÜRLER.
 
Private Sub CommandButton7_Click()
UserForm1.PictureSizeMode = fmPictureSizeModeClip
Me.PrintForm
End Sub
ben bu şekilde denemdim oldu arkadaşlar...
 
Teşekkürler

Paylaşım için teşekkürler

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;
Kod:
    .Orientation = xlLandscape

Yerine
Kod:
    .Orientation = xlPortrait

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.

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)

 
Özür Dilerim Çok Eski Bir Konu ama
win 10 office2013 64 bit kullanıyorum
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
burada nasıl bir değişiklik yapmam gerekiyor.hata veriyor
 
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.
 
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 benimde 64 bitte kullanmam gerekiyor konu eski ama yardımcı olma şansınız varmı
 
#5 nolu mesajda nasıl yapacağınız tarif edilmiş. Neresini yapamadınız?
 
64 bit için deklarasyon kodunu düzenlemeniz gerekiyor. Bu işlem içinde #12 nolu mesajda çözüm verilmiş.
 
Evet hocam o şekilde denedim ama olmadı mesajın yanlis yazılabileceğini düşündüğümden dolayı sordum
 
Başka bir yerde hata yapıyor olabilirsiniz.

Örnek dosyanızı paylaşınız.
 
ilginize teşekkürler hocam yarin ofiste tekrar denerim olmazsa dosya paylaşırım.
iyi akşamlar
 
Geri
Üst