UserForm PrintScreen Olayi.. Yardım !

Katılım
2 Eylül 2005
Mesajlar
12
Merhabalar ben UserForm'u *.bmp yada *.jpg olarak kaydetmek istiyorum yani commandbutton1 'e tıkladığım zaman dosya ismini sorup userform'u resim olarak katdetmesini istiyorum. Şimdiden teşekkürler.
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,057
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Ekte bir örnek dosya hazırladım. Userformun resmini kaydetmeden önce form açıkken alt+printscreen tuşlarına basarak resmi clipboarda kopyalamanız gerekiyor. Daha sonra form üzerindeki butona bastığınızda userformun resmini verdiğiniz isme göre C'nin altına jpg olarak kaydedecektir. Bu arada alt+printscreen işlemini yapan bir koda sahip olan varsa ve bizimle paylaşırsa, bu manuel işlemide ortadan kaldırabiliriz. Userforma birde image nesnesi ekledim bu nesneyede kaydedilen resmi çağırıyoruz, böylece resmin kaydedilmiş olduğu teyit ediliyor.
 

Ekli dosyalar

Son düzenleme:

Ali

Uzman
Katılım
21 Temmuz 2005
Mesajlar
7,900
Excel Vers. ve Dili
İş:Excel 2016-Türkçe
Levent Bey Kill Timer ne için gerekli onu tam anlamadım ama
Alt+PrintScreen için kodlar

Kod:
Option Explicit
Private Declare Sub keybd_event Lib "user32.dll" _
(ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Declare Function SetTimer Lib "user32" _
(ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, _
ByVal lpTimerFunc As Long) As Long
Private Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, _
ByVal nIDEvent As Long) As Long
Dim lTimerID As Long
Private Const KEYEVENTF_KEYUP = &H2
Private Const VK_SNAPSHOT = &H2C
Private Const VK_MENU = &H12
 
Private Sub TimerProc()
KillTimer 0, lTimerID
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
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,057
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Sn fructose

Kodlar için teşekkür ederim. Set timer ve kill timer apileri gereksiz görünüyor, kullanım amacını bende bilmiyorum.
 
Katılım
2 Eylül 2005
Mesajlar
12
bu işlemi auto yapan bir kod yokmu resim falan göstermeden Alt+PrintScreen yapmadan kendisi yapsa böyle nbir kod mevcutmu acaba? Teşekkürler
 

Ali

Uzman
Katılım
21 Temmuz 2005
Mesajlar
7,900
Excel Vers. ve Dili
İş:Excel 2016-Türkçe
Levent Beyinde belirttiği gibi kill timer kodlarına gerek yok aşağıda Alt+PrintScreen kodlarının sade hali vardır.

Kod:
Option Explicit
Private Declare Sub keybd_event Lib "user32.dll" _
(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
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
 
Katılım
2 Eylül 2005
Mesajlar
12
verdiğiniz kodları levent beyin vermiş olduğu örnekle birleştiremedim hata var galiba. yardımcı olursanız sevinirim.
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,057
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
verdiğiniz kodları levent beyin vermiş olduğu örnekle birleştiremedim hata var galiba. yardımcı olursanız sevinirim.
Kodlarda hata yok ama bende birleştiremedim. Sebebinide açıkçası anlayamadım. Her işlemde bir önceki kopyalananı sayfa üzerine yapıştırıyor. Çözdüğümde bilgi vereceğim.
 
Katılım
29 Nisan 2007
Mesajlar
81
Excel Vers. ve Dili
2003 Türkçe
Bu ve inceledigim birkac forumdan aldıgım yardımla userformu printscreen edip resmini c altında tanımladıgım yere kaydetmeyi basardım ama 2 tane cozemedigim sorun olustu;

1- userformu printscreen ettikten sonra cnin altına 1.jpg diye bir dosya kaydediyor ama eger orada 1.jpg diye bir dosya varsa sormadan uzerine kaydetmesini nasıl saglayabilirim? Cunku eger varsa kod calısmıyor.

2- aynı zamanda Userformun uzerindeki carpı isaretini de kaldırmak istiyorum


Private Declare Function GetWindowLongA Lib "User32" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib "User32" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function FindWindowA Lib "User32" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Private Sub UserForm_Initialize()
Dim hwnd As Long
hwnd = FindWindowA("Thunder" & IIf(Application.Version Like "8*", "X", "D") & "Frame", Me.Caption)
SetWindowLongA hwnd, -16, GetWindowLongA(hwnd, -16) And &HFFF7FFFF
End Sub

bu kodun basındaki Private Declare Function kısımların kodun en basına yazılmalı ama benim aynı zamanda printscreen etmek icin kullandıgım asagıdaki kod var.

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

birbirlerinden ayrılamadıkları icin birlikte kullanamıyorum . Ne yapmam gerekir?

dosyayı ekledim

cok tesekkurler
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,057
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Ekli dosyayı inceleyin. Kopyalanan resmin üzerinde "kapat" butonunun görünmemesi içinde bazı ilaveler yaotım. Eğer gerekli görmezseniz bu ilaveleri kaldırırsınız.
 
Katılım
29 Nisan 2007
Mesajlar
81
Excel Vers. ve Dili
2003 Türkçe
aaa coook tesekkurler tam istedigim bu ama printscreen sıralamasında hata var galiba ama bir turlu sorunu anlayamadım kodu inceledim ama ..
cunku degerleri degistirerek denerseniz eski halini kopyalıyor birkac defa denerseniz resim degisiyor sanki copy komutu eski resimde kalıyor da 1-2 deneme sonra printscreen o anki screen oluyor gibi.
bi de cnin altında 1.jpg diye baska bir dosya varsa (kendi urettigi degil baska bi jpg dosyasını save edip calıstırınca) paste method of worksheet class has failed hatası veriyor.
 
Üst