• 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

Muhammet Okumuş

Destek Ekibi
Destek Ekibi
Katılım
28 Eylül 2007
Mesajlar
4,042
Excel Vers. ve Dili
2013 Türkçe
Arkadaşlar merhaba,

Userform'a kayıtlı resim ekleme ile ilgili çalışmalar buldum. Ama benim istediğim bu değil.

Düğmeye tıkladığımızda Userform açılacak ve B2:G16 (satır sayısı değişken) aralığının resmini Userform'a yapıştıracak. Dosyada nasıl görünmesi ile ilgili görsel paylaştım.
Userform yüksekliği ve genişliği resim boyutuna göre değişken olmalı.
 

Ekli dosyalar

Bunun için resmin pixel yüksekliğini/genişliğini, Userform ebat ölçü birimi olan Point' e çevirerek yüksekliğini/genişliğini ayarlamanız gerekir.

Özetle araştırmanız gereken iki konu var:
- FileSystemObject nesnesi NameSpace özellikleriyle pixel büyüklükleri alınabiliyor.
- Pixel To Point için internette biraz araştırma yapın...

.
 
Boyut ile ilgili kısmı araştıracağım. Peki kopyala/yapıştır yapabilir miyiz?
 
Bununla ilgili yabancı sitelerden de araştırdım ama resmin bilgisayarda kayıtlı olması lazım diyor.

216190
 
Korhan Bey çok teşekkür ederim. Aradığım cevap buydu. Tekrardan teşekkür ederim.
 
Resimde bozulma olmasının nedeni ne acaba? Reim netliğini sağlamak mümkün mü? Eğer genişlik ayarından kaynaklanıyorsa sabit değerlerde kullanabiliriz. Ben kodda değişkliikler yaptım ama netliği sağlayamadım. Soldaki veriler sağdaki ise resim olarak yapıştırılmış hali.216199
 
Ben üstteki mesajımda ki dosyada küçük bir düzeltme yaptım. (Formatta bir değişiklik yoktur.)

Ek olarak daha önce forumda işlenen konuların içinden seçtiğim linkleri inceleyiniz.

 
Merhaba;
Alternatif eksik çalışma
Resim alan aralığını , bu alana bağlı olarak userform en ve boy değerleri sayfada belirlenebilirse ekteki gibi olabilir.
İyi çalışmalar.
 

Ekli dosyalar

Resim net olarak yerleşmiyor.216228
 

Ekli dosyalar

  • 1586356265367.png
    1586356265367.png
    107.7 KB · Görüntüleme: 1
Merhaba Arkadaşlar,
Korhan hocam, Resim_1 deki hatayı veriyor ve Userform açılmıyor
Muygun hocam, Resim_2 deki hatayı veriyor ve Userform boş geliyor
Neden olabilir?
Saygılarımla
 

Ekli dosyalar

  • Resim_1.png
    Resim_1.png
    18.5 KB · Görüntüleme: 5
  • Resim_2.png
    Resim_2.png
    40.8 KB · Görüntüleme: 5
@Tevfik_Kursun,

DEBUG dediğinizde kod bölümünde nereye gidiyor. Sarı renkli satırdaki değerin üstüne mouse ile geldiğinizde aldığı değer ne oluyor?
 
Sayın Korhan Ayhan Hocam,
UserForm1=<Object variable or with block variable not set>
ibaresi geliyor.
Saygılarımla
 
Merhaba;
Deneme ve çalışmamı Ofis 2003 üzerinde yaptım ve böyle bir soruna rastlamadım.
NOT: alanı .jpg olarak kaydedip sonra form üzerine alıyorum. Dolayısıyla pc nin kayıt performansına bağlı olarak kaydetmeden userform aktif olabiliyor. Bunu engellemek için gecikme sağlamak adına 1-10000 aralığında boş döngü koydum. (bunun yerine dosyanın varlığı kontrol ettirilebilir)
Ama ihtimalle versiyon farkı olabilir.
 

Ekli dosyalar

  • ekr görüntüsü.jpg
    ekr görüntüsü.jpg
    249.6 KB · Görüntüleme: 1
Sayın Muygun Hocam,
Teşekkür ederim, ama sayma bölgesi sanki önce değil. Saymayı 500000 e çıkardığım halde fark etmedi
Saygılarımla
 
Son düzenleme:
Burada istenen userforma seçili alanın resmi mi yoksa bu seçili alanın resmini farklı bir kalasöre veya sayfaya kayıt yapmakmı ?
Eğer seçili alanı userforma resim olarak almaksa bu kodu bir deneyiniz.

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
UserForm1.Picture = LoadPicture("")
UserForm1.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
ActiveSheet.Shapes(Selection.Name).CopyPicture 1, 2

UserForm1.Height = ActiveSheet.Shapes(Selection.Name).OLEFormat.Object.ShapeRange.Height + 18
UserForm1.Width = ActiveSheet.Shapes(Selection.Name).OLEFormat.Object.ShapeRange.Width + 10

Call ImageToMePicture
ActiveSheet.Shapes(Selection.Name).Delete
OpenClipboard (0&)
EmptyClipboard
CloseClipboard

End Sub
Yeni Bit Eşlem Resmi (2).jpg
 

Ekli dosyalar

Son düzenleme:
Alternatif bir dosya ekte verilmiş olup, UserForm'daki resim çözünürlüğü bence gayet güzeldir (HD kalitesinde :)).... Ayrıca, UserForm'un yüksekliği sayfadan kopyalanan alanın boyutuna göre değişmektedir.


Capture.PNG

.
 

Ekli dosyalar

Son düzenleme:
Merhaba Halit3 Hocam,
İlginize çok teşekkür ederim. Aslında konu benim değil. Ama bu günlerde farklı bir konuya bakıyorum. Orada kullanabilir miyim diye merak etmiştim.
Oluşturmaya çalıştığım çalışmayı istediğim gibi sonuçlandıramazsam sizlere sorarım.
Saygılarımla
 
Sayın Haluk Hocam,
Ekteki hata geldi. benim 64 bit Ofisi beğenmedi her halde.
Saygılarımla
 

Ekli dosyalar

  • 2020-04-09_16-51-50.png
    2020-04-09_16-51-50.png
    20.8 KB · Görüntüleme: 4
Geri
Üst