Genel Bakış
Image (Resim denetimi), UserForm üzerine ya da çalışma sayfasına ActiveX denetimi olarak eklenen ve bir resim dosyasını gösteren denetimdir. Logo, ürün fotoğrafı ya da simge gibi görselleri forma yerleştirmek ve bunları kod ile değiştirmek için kullanılır. Denetim yalnızca resim gösterir; resmi düzenleme araçları sunmaz.
İlk satır resmi yükler, ikinci satır denetimi boşaltır. LoadPicture BMP, JPG, GIF, ICO, WMF ve CUR dosyalarını okur; yeni Excel sürümlerinde PNG dosyaları da genellikle yüklenir, ancak saydamlık (alfa) bilgisi korunmayabilir. Sorun yaşarsanız JPG ya da BMP kullanın.
Çalışma sayfasındaki bir ActiveX Image denetimine kod modülünden doğrudan adıyla ulaşabilirsiniz. Başka bir modülden ise OLEObjects koleksiyonu kullanılır:
Sayfadaki denetimin özelliklerine OLEObjects(...).Object üzerinden ulaşıldığına dikkat edin; Left, Top, Width, Height gibi yerleşim özellikleri ise doğrudan OLEObject üzerindedir. Tasarım modunda denetimi seçip sağ tıklayarak Özellikler (Properties) penceresinden de Picture özelliğine dosya atayabilirsiniz; bu durumda resim çalışma kitabının içine gömülür ve dosya yolu gerekmez.
Bu kod bir UserForm içinde çalıştığı için burada çalıştırılmaz. Form açıldığında logo.jpg bulunursa en boy oranı korunarak ve ortalanarak gösterilir. Dosya bulunamazsa Dir işlevi boş metin döndürür ve Image1 gizlenir; böylece formda boş bir kutu kalmaz. Dir ile dosya varlığını denetlemek, LoadPicture'ın dosya yoksa vereceği çalışma zamanı hatasını da önler.
Form açıldığında ürün adları açılır listeye dolar. Kullanıcı bir ürün seçtiğinde Change olayı çalışır; listedeki sıraya göre sayfadan dosya adı okunur ve resim Image1'e yüklenir. Dosya bulunamazsa LoadPicture("") ile önceki ürünün resmi temizlenir. Resme tıklandığında Click olayı formun başlığına seçili ürünün adını yazar. Form gösterme işlemi burada çalıştırılmadığı için sonuç yalnızca anlatılmıştır.
Makro her satırdaki mod adına bakar ve karşılığını yazar. Clip için değer 0, Stretch için 1, Zoom için 3 olarak yazılır. Davranış sütununda ise sırasıyla şu açıklamalar görünür: Resim kırpılır, boyutu değişmez, Kutuyu dolduracak şekilde gerilir ve En boy oranı korunarak sığdırılır. Image denetiminde bu değerleri sayı olarak yazmak yerine fmPictureSizeModeClip, fmPictureSizeModeStretch ve fmPictureSizeModeZoom adlarını kullanmak kodu daha okunur kılar.
Image denetimi nedir ve nereye eklenir
Image denetimi, MSForms (Microsoft Forms) kitaplığının bir parçasıdır. İki yerde kullanılabilir:- UserForm: Geliştirici > Visual Basic (Developer > Visual Basic) ile VBA düzenleyicisini açın, Ekle > UserForm (Insert > UserForm) ile bir form oluşturun, ardından Araç Kutusu'ndaki Image simgesini forma sürükleyin. Varsayılan adı Image1, Image2 biçimindedir.
- Çalışma sayfası: Geliştirici > Ekle > ActiveX Denetimleri > Resim (Developer > Insert > ActiveX Controls > Image) yolunu izleyin. Bu durumda denetim sayfadaki bir nesne olarak durur ve resim çalışma kitabının içine gömülür.
Önemli özellikler
Image denetiminde en sık kullanılan özellikler şunlardır:- Picture: Gösterilen resmi belirler. Kodla atama yapılırken genellikle LoadPicture işlevi kullanılır.
- PictureSizeMode: Resmin denetim kutusuna nasıl sığdırılacağını belirler. fmPictureSizeModeClip (0) resmi gerçek boyutunda bırakır ve taşan kısmı keser, fmPictureSizeModeStretch (1) resmi kutuyu dolduracak şekilde gerer, fmPictureSizeModeZoom (3) en boy oranını koruyarak sığdırır. Varsayılan değer Clip'tir.
- PictureAlignment: Resmin kutu içindeki konumunu belirler: fmPictureAlignmentTopLeft (0), TopRight (1), Center (2), BottomLeft (3), BottomRight (4). Varsayılan Center'dır.
- PictureTiling: True olursa resim kutuyu kaplayacak şekilde döşenir (mozaik).
- BorderStyle: fmBorderStyleNone (0, kenarlıksız) ya da fmBorderStyleSingle (1, tek çizgi). Varsayılan kenarlıksızdır.
- BorderColor: Kenarlık rengi. Yalnızca BorderStyle tek çizgi iken görünür.
- SpecialEffect: Kutunun üç boyutlu görünümü: Flat (0), Raised (1), Sunken (2), Etched (3), Bump (6).
- BackColor ve BackStyle: Resmin arkasında kalan alanın rengi ve saydam ya da opak olması.
- AutoSize: True olursa denetim, resmin boyutuna göre yeniden boyutlanır.
- Visible, Enabled, ControlTipText: Görünürlük, etkinlik ve fare üzerine gelince çıkan ipucu metni.
- Left, Top, Width, Height: Denetimin konumu ve boyutu (punto cinsinden).
Önemli yöntemler ve olaylar
Image denetimi klavye odağı almadığı için SetFocus gibi odak yöntemlerini kullanmanıza gerek kalmaz. Sık kullanılan yöntemler ve olaylar:- Move: Denetimi yeni bir konuma taşır ya da boyutunu değiştirir.
- ZOrder: Denetimin diğer denetimlere göre ön ya da arka katmanda durmasını sağlar.
- Click ve DblClick: Resme tıklandığında ve çift tıklandığında çalışır.
- MouseDown, MouseMove, MouseUp: Fare düğmesi basıldığında, fare resmin üzerinde hareket ettiğinde ve düğme bırakıldığında çalışır. Resim üzerinde sürükleme ya da koordinat okuma için kullanılır.
- BeforeDragOver ve BeforeDropOrPaste: Sürükle-bırak işlemleri için kullanılır.
- Error: Denetimde bir hata oluştuğunda çalışır.
Resim yükleme ve çalışma sayfasında kullanım
Resmi çalışma zamanında yüklemek için LoadPicture işlevi kullanılır. Resmi kaldırmak için boş bir dosya adı verilir:
VBA
2 satır
Me.Image1.Picture = LoadPicture("C:\Resimler\logo.jpg")
Me.Image1.Picture = LoadPicture("")
Çalışma sayfasındaki bir ActiveX Image denetimine kod modülünden doğrudan adıyla ulaşabilirsiniz. Başka bir modülden ise OLEObjects koleksiyonu kullanılır:
VBA
2 satır
Sheets("Sayfa1").Image1.Picture = LoadPicture("C:\Resimler\logo.jpg")
Sheets("Sayfa1").OLEObjects("Image1").Object.PictureSizeMode = 3
1. Forma logo yükleme
Bu örnekte bir UserForm üzerinde Image1 adlı bir Image denetimi bulunur. Aşağıdaki kodu o UserForm'un kod modülüne yapıştırın (forma çift tıklayın ya da F7 tuşuna basın). Kod, form açılırken çalışma kitabıyla aynı klasördeki logo.jpg dosyasını yükler, dosya yoksa denetimi gizler. Sayfadaki tablo, formda kullanılan dosyaları belgelemek içindir.
VBA
19 satır
Option Explicit
Private Sub UserForm_Initialize()
Dim yol As String
yol = ThisWorkbook.Path & "\logo.jpg"
' Dosya varsa resmi yükle
If Dir(yol) <> "" Then
With Me.Image1
.Picture = LoadPicture(yol)
.PictureSizeMode = fmPictureSizeModeZoom
.PictureAlignment = fmPictureAlignmentCenter
.BorderStyle = fmBorderStyleNone
End With
Else
' Dosya bulunamadıysa boş bir kutu göstermeyin
Me.Image1.Visible = False
End If
End Sub
Image
Formülünü incelemek için bir hücre seçin.| A | B | C | |
|---|---|---|---|
| 1 | Form Öğesi | Dosya Adı | Boyut Modu |
| 2 | Image1 | logo.jpg | Zoom |
| 3 | Image2 | kase.gif | Stretch |
Logo ListesiExcelDepo v1.0.0
2. Listeden seçilen ürünün resmini gösterme
Sayfada ürün adları ve her ürüne ait resim dosya adları bulunur. UserForm üzerinde ComboBox1 ve Image1 denetimleri vardır. Aşağıdaki kodu o UserForm'un kod modülüne yapıştırın. Resim dosyaları, çalışma kitabının bulunduğu klasördeki Resimler klasöründe durmalıdır.
VBA
37 satır
Option Explicit
Private Sub UserForm_Initialize()
Dim ws As Worksheet
Dim i As Long
Set ws = ThisWorkbook.Worksheets("Ürün Resimleri")
' Ürün adlarını açılır listeye ekle
For i = 2 To 6
Me.ComboBox1.AddItem ws.Cells(i, 1).Value
Next i
Me.Image1.PictureSizeMode = fmPictureSizeModeZoom
End Sub
Private Sub ComboBox1_Change()
Dim ws As Worksheet
Dim dosya As String
' Henüz bir seçim yoksa çık
If Me.ComboBox1.ListIndex < 0 Then Exit Sub
Set ws = ThisWorkbook.Worksheets("Ürün Resimleri")
dosya = ThisWorkbook.Path & "\Resimler\" & ws.Cells(Me.ComboBox1.ListIndex + 2, 2).Value
If Dir(dosya) <> "" Then
Me.Image1.Picture = LoadPicture(dosya)
Else
' Resim yoksa denetimi boşalt
Me.Image1.Picture = LoadPicture("")
End If
End Sub
Private Sub Image1_Click()
Me.Caption = "Seçili ürün: " & Me.ComboBox1.Value
End Sub
Image
Formülünü incelemek için bir hücre seçin.| A | B | |
|---|---|---|
| 1 | Ürün | Dosya Adı |
| 2 | Masa Lambası | lamba.jpg |
| 3 | Ofis Koltuğu | koltuk.jpg |
| 4 | Kitaplık | kitaplik.jpg |
| 5 | Çalışma Masası | masa.jpg |
| 6 | Dosya Dolabı | dolap.jpg |
Ürün ResimleriExcelDepo v1.0.0
3. PictureSizeMode sabitlerinin değerleri
Image denetiminin PictureSizeMode özelliği sayısal değerler alır. Bu örnek, standart bir modüle yapıştırılan makroyla A sütunundaki mod adlarına karşılık gelen sayısal değeri ve davranışı yan sütunlara yazar. Böylece sabitlerin değerlerini sayfada görebilirsiniz. Kod Image denetimine ihtiyaç duymadığı için doğrudan çalıştırılabilir.
VBA
22 satır
Option Explicit
Sub ModDegerleriniYaz()
Dim ws As Worksheet
Dim i As Long
Set ws = ThisWorkbook.Worksheets("Mod Değerleri")
For i = 2 To 4
Select Case ws.Cells(i, 1).Value
Case "Clip" ' fmPictureSizeModeClip
ws.Cells(i, 2).Value = 0
ws.Cells(i, 3).Value = "Resim kırpılır, boyutu değişmez"
Case "Stretch" ' fmPictureSizeModeStretch
ws.Cells(i, 2).Value = 1
ws.Cells(i, 3).Value = "Kutuyu dolduracak şekilde gerilir"
Case "Zoom" ' fmPictureSizeModeZoom
ws.Cells(i, 2).Value = 3
ws.Cells(i, 3).Value = "En boy oranı korunarak sığdırılır"
End Select
Next i
End Sub
Image
Formülünü incelemek için bir hücre seçin.| A | B | C | |
|---|---|---|---|
| 1 | Mod | Değer | Davranış |
| 2 | Clip | 0 | Resim kırpılır, boyutu değişmez |
| 3 | Stretch | 1 | Kutuyu dolduracak şekilde gerilir |
| 4 | Zoom | 3 | En boy oranı korunarak sığdırılır |
Mod DeğerleriExcelDepo v1.0.0
Kullanırken dikkat edin
- Dosya yolunu ve varlığını denetleyin: LoadPicture, dosya bulunamazsa çalışma zamanı hatası verir. Resmi yüklemeden önce Dir işleviyle dosyanın var olduğunu denetleyin. Yolu sabit yazmak yerine ThisWorkbook.Path ile çalışma kitabının klasörünü temel alırsanız dosyayı başka bilgisayara taşıdığınızda kod bozulmaz.
- Desteklenen biçimler: LoadPicture BMP, JPG, GIF, ICO, WMF ve CUR biçimlerini okur. PNG dosyaları yeni sürümlerde çoğunlukla yüklenir ancak saydam arka planlar beklediğiniz gibi görünmeyebilir. Çok büyük çözünürlüklü resimler formun açılışını yavaşlatır; resmi önceden küçültmeniz önerilir.
- Resim bozuk görünüyorsa PictureSizeMode'a bakın: Varsayılan Clip modunda büyük bir resmin yalnızca bir bölümü görünür. Resmin tamamını bozmadan göstermek için fmPictureSizeModeZoom, kutuyu tamamen doldurmak için (oran bozulabilir) fmPictureSizeModeStretch kullanın.
- Gömülü resim dosya boyutunu büyütür: Özellikler penceresinden Picture'a atanan ya da sayfadaki ActiveX Image'a verilen resim çalışma kitabının içine gömülür ve dosya boyutunu artırır. Kodla LoadPicture kullanırsanız resim dosyada saklanmaz, ancak bu kez resim dosyasının her bilgisayarda aynı yolda bulunması gerekir.
- Mac ve ActiveX sınırlaması: UserForm içindeki Image denetimi ile çalışma sayfasındaki ActiveX denetimleri Mac için Excel'de sınırlı desteklenir ya da hiç desteklenmez. Dosyayı farklı platformlarda paylaşacaksanız bunu göz önünde bulundurun.
- Sayfadaki sıradan resimler için farklı yöntem: Ekle menüsünden eklenen resimler Image denetimi değil, Shape nesnesidir. Onları kodla yönetmek için Shapes koleksiyonu ve AddPicture yöntemi kullanılır; Picture, PictureSizeMode gibi Image özellikleri bu nesnelerde yoktur.
- İlgili konular:
- LoadPicture: Resim dosyasını yükleyen işlev.
- UserForm: Image denetiminin üzerinde yer aldığı form nesnesi.
- ComboBox ve ListBox: Resim seçimi için birlikte kullanılan denetimler.
- Dir: Dosya varlığını denetleyen işlev.
- OLEObjects: Sayfadaki ActiveX denetimlerine ulaşma koleksiyonu.
- Shapes.AddPicture: Sayfaya sıradan resim ekleme yöntemi.
- ThisWorkbook.Path: Çalışma kitabının klasörünü verir.