• DİKKAT

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

Userforma belirli alanın resmini yapıştırmak

Merhaba Arkadaşlar,
Sizleri sıkıntıya sokmuş gibi hissediyorum. Ama sonuçları paylaşıyorum. Lütfen benim için üzerinde durmayın.
Haluk hocanın son dosya sonucu Resim1...
Halit3 hocanın dosya2 sonucu Resim2... ve Resim3... Form Aç 1
Halit3 hocanın dosya2 sonucu Resim3... ve Resim4... Form Aç 2
Halit3 hocanın dosya4 sonucu Resim5... ve Resim6... Form Aç 3
Saygılarımla
 

Ekli dosyalar

  • Resim1_22-46-22.png
    Resim1_22-46-22.png
    24.5 KB · Görüntüleme: 2
  • Resim2_22-50-04.png
    Resim2_22-50-04.png
    43 KB · Görüntüleme: 2
  • Resim3_22-50-22.png
    Resim3_22-50-22.png
    9.1 KB · Görüntüleme: 2
  • Resim4_22-51-32.png
    Resim4_22-51-32.png
    37.3 KB · Görüntüleme: 2
  • Resim5_23-02-09.png
    Resim5_23-02-09.png
    31.9 KB · Görüntüleme: 2
  • Resim6_23-02-30.png
    Resim6_23-02-30.png
    7 KB · Görüntüleme: 2
Sayın Muhammet Okumuş
userform1 seçli alandan büyük onun için ekran görüntüsü bozuluyor
eklemiş olduğunuz görüntü ilk başdaki kodlara ait olmalı
38 nolu mesajdaki dosyaya ait ekran görüntülerini paylaşırmısınız.
 
Merhaba Arkadaşlar,
Sizleri sıkıntıya sokmuş gibi hissediyorum. Ama sonuçları paylaşıyorum. Lütfen benim için üzerinde durmayın.
......
....

Tevfik Bey, siz üzülmeyin .... ben kafayı 64 Bit'e taktığım için uğraşıyorum..... 18 No'lu mesajdaki dosyaya birkaç ilave yapıp, bir de hata denetimi ekledim, çalıştırdığınızda aldığınız hata mesajını söylerseniz belki bir ipucu yakalarız....

.
 
Son düzenleme:
Profilinizde ofisin 2010 sürümü olduğu gözüküyor dosya ofis 2003 formatından ofis 2010 formatına değiştirip denermisiniz.
 
Fazlada israrcı olmayacağım farklı bir yöntem daha var. Bunda apiler yok.
clipbrd.dll nesnesi ile çok küçük bir kod ile bu işlem oluyor.

kod:
Kod:
Private Sub UserForm_Activate()

Dim myClp As Object
Set myClp = CreateObject("clipbrd.clipboard")
myClp.Clear
adres = ActiveWindow.RangeSelection.Address
Set Adres2 = ActiveSheet.Range(adres)
ActiveSheet.Range(Adres2.Address).Copy
Me.Picture = myClp.GetData
Me.Height = Adres2.Height + 22
Me.Width = Adres2.Width
myClp.Clear
End Sub

kodun çalışması için referanslarda clipbrd.dll dosyası olmalı
Yeni Bit Eşlem Resmi6.jpgYeni Bit Eşlem Resmi7.jpg
 

Ekli dosyalar

Son düzenleme:
Sayın Korhan Ayhan Hocam,
Günaydın,
Resim10, bu sabah indirdiğim dosyanızdan
Gün içinde ne zaman isterseniz bağlanıp DEBUG için bakabilirsiniz.
Saygılarımla
 

Ekli dosyalar

  • Resim_10_2020-04-10_06-23-14.png
    Resim_10_2020-04-10_06-23-14.png
    49.6 KB · Görüntüleme: 2
  • Resim_11_2020-04-10_06-25-28.png
    Resim_11_2020-04-10_06-25-28.png
    23 KB · Görüntüleme: 2
  • Resim_12_2020-04-10_06-26-38.png
    Resim_12_2020-04-10_06-26-38.png
    5.2 KB · Görüntüleme: 2
  • Resim_20_2020-04-10_06-35-40.png
    Resim_20_2020-04-10_06-35-40.png
    18.2 KB · Görüntüleme: 2
  • Resim_21_2020-04-10_06-37-42.png
    Resim_21_2020-04-10_06-37-42.png
    55.5 KB · Görüntüleme: 2
  • Resim_22_2020-04-10_06-38-22.png
    Resim_22_2020-04-10_06-38-22.png
    8.3 KB · Görüntüleme: 2
  • Resim_30_2020-04-10_06-41-49.png
    Resim_30_2020-04-10_06-41-49.png
    21.4 KB · Görüntüleme: 2
  • Resim_31_2020-04-10_06-43-16.png
    Resim_31_2020-04-10_06-43-16.png
    23.8 KB · Görüntüleme: 2
  • Resim_32_2020-04-10_06-43-36.png
    Resim_32_2020-04-10_06-43-36.png
    4.9 KB · Görüntüleme: 2
Sayın Muhammet Okumuş

39 nolu mesajdaki dosya ve kodları. 17 nolu mesajdan aldığınız anlaşılıyor orada resim geliyor ama orantısı bozuk olarak görünüyor kad da genişlik ve yükseklik ayarları aktif ama dosyada aktif değildi şimdi aynı dosyayı ve kodu yeniden ekliyorum denermisiniz.

Kod:
#If Win64 Then
Private Declare PtrSafe Function OpenClipboard& Lib "user32" (ByVal hwnd&)
Private Declare PtrSafe Function EmptyClipboard& Lib "user32" ()
Private Declare PtrSafe Function GetClipboardData& Lib "user32" (ByVal wFormat%)
Private Declare PtrSafe Function SetClipboardData& Lib "user32" (ByVal wFormat&, ByVal hMem&)
Private Declare PtrSafe Function CloseClipboard& Lib "user32" ()
Private Declare PtrSafe Function CopyImage& Lib "user32" (ByVal handle&, ByVal un1&, ByVal n1&, ByVal n2&, ByVal un2&)
Private Declare PtrSafe Function IIDFromString Lib "ole32" (ByVal lpsz As String, ByRef lpiid As GUID) As Long
Private Declare PtrSafe Function OleCreatePictureIndirect Lib "olepro32" (pPictDesc As PICTDESC, ByRef riid As GUID, ByVal fOwn As Long, ByRef ppvObj As IPicture) As Long

#Else
Private Declare Function OpenClipboard& Lib "user32" (ByVal hwnd&)
Private Declare Function EmptyClipboard& Lib "user32" ()
Private Declare Function GetClipboardData& Lib "user32" (ByVal wFormat%)
Private Declare Function SetClipboardData& Lib "user32" (ByVal wFormat&, ByVal hMem&)
Private Declare Function CloseClipboard& Lib "user32" ()
Private Declare Function CopyImage& Lib "user32" (ByVal handle&, ByVal un1&, ByVal n1&, ByVal n2&, ByVal un2&)
Private Declare Function IIDFromString Lib "ole32" (ByVal lpsz As String, ByRef lpiid As GUID) As Long
Private Declare Function OleCreatePictureIndirect Lib "olepro32" (pPictDesc As PICTDESC, ByRef riid As GUID, ByVal fOwn As Long, ByRef ppvObj As IPicture) As Long

#End If

Private Type GUID
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(8) As Byte
End Type

Private Type PICTDESC
cbSize As Long
picType As Long
hImage As Long
End Type
Private Sub ImageToMePicture()
Dim hCopy&: OpenClipboard 0&
hCopy = CopyImage(GetClipboardData(2), 0, 0, 0, &H4)
CloseClipboard
If hCopy = 0 Then Exit Sub
Const IPictureIID = "{7BF80981-BF32-101A-8BBB-00AA00300CAB}"
Dim IPic As IPicture, tIID As GUID, tPICTDEST As PICTDESC, Ret&
Ret = IIDFromString(StrConv(IPictureIID, vbUnicode), tIID)
If Ret Then Exit Sub
With tPICTDEST
.cbSize = Len(tPICTDEST)
.picType = 1
.hImage = hCopy
End With
Ret = OleCreatePictureIndirect(tPICTDEST, tIID, 1, IPic)
If Ret Then Exit Sub
Me.Picture = LoadPicture("")
Me.Picture = IPic

Set IPic = Nothing
End Sub


Private Sub UserForm_Activate()
OpenClipboard (0&)
EmptyClipboard
CloseClipboard
sat = ActiveWindow.RangeSelection.Row
sut = ActiveWindow.RangeSelection.Column
Set Adres2 = ActiveSheet.Range(ActiveWindow.RangeSelection.Address)
ActiveSheet.Range(Adres2.Address).CopyPicture Appearance:=xlScreen, Format:=xlBitmap
Cells(sat, sut).PasteSpecial
Me.Height = ActiveSheet.Shapes(Selection.Name).OLEFormat.Object.ShapeRange.Height + 18
Me.Width = ActiveSheet.Shapes(Selection.Name).OLEFormat.Object.ShapeRange.Width + 10
ActiveSheet.Shapes(Selection.Name).CopyPicture 1, 2
Call ImageToMePicture
ActiveSheet.Shapes(Selection.Name).Delete
Range(Adres2.Address).Select
OpenClipboard (0&)
EmptyClipboard
CloseClipboard

End Sub
 

Ekli dosyalar

Günaydın Halit3 Hocam,
Saygılarımla
 

Ekli dosyalar

  • FormAc1_2020-04-10_10-15-51.png
    FormAc1_2020-04-10_10-15-51.png
    49.9 KB · Görüntüleme: 2
  • FormAc2_2020-04-10_10-16-21.png
    FormAc2_2020-04-10_10-16-21.png
    36.6 KB · Görüntüleme: 2
Haluk Bey,

Bende sorunsuz çalıştı.
Bilginize, elinize sağlık.
 
Ömer Bey, Excel 64 Bit kullanıyorsunuz, öyle değil mi?

.
 
Sayın Haluk Hocam,
Sonuç mükemmel. Elinize sağlık. Dosyada makro da görünmüyor. Sistem nasıl çalışıyor?
Saygılarımla
 

Ekli dosyalar

  • 2020-04-10_11-23-04.png
    2020-04-10_11-23-04.png
    40.1 KB · Görüntüleme: 3
Vayyy..... hem Ömer Beyden hem de Tevfik Beyden olumlu geri dönüş olduğuna göre, bu iş 32 ve 64 Bit Excel'de tamamdır ..... ;)

Teşekkürler beyler,

.
 
Bilgi için teşekkürler Asri Bey, güzel haber ...

.
 
Sayın Haluk Hocam,
Şunun bir de sırrını paylaşırsanız sevinirim.
Saygılarımla
 
Tevfik Bey, UserForm modülünün içinde bir kamyon dolusu API ve kod var ....

.
 
Geri
Üst