Genel Bakış
LoadPicture (LoadPicture işlevi), diskteki bir resim dosyasını belleğe yükleyen ve bir resim nesnesi olarak geri veren VBA işlevidir. Dönen nesne, UserForm üzerindeki Image denetiminin ya da sayfaya eklenmiş ActiveX Image denetiminin Picture özelliğine atanır. Böylece resim, tasarım zamanında değil kod çalışırken ve dosya adına göre değiştirilebilir.
İşlev; bmp, gif, jpg, ico, cur, wmf ve emf dosyalarını yükler. PNG desteği Office sürümüne ve denetime göre değişebilir; kullanmadan önce kendi bilgisayarınızda deneyin. Dosya bulunamazsa 53 numaralı "Dosya bulunamadı" hatası, dosya geçerli bir resim değilse 481 numaralı "Geçersiz resim" hatası oluşur.
Makro, D2 hücresine klasör yolu ile dosya adını birleştirerek C:\Resim\kulaklik.jpg değerini yazar; sonraki satırlar için de aynı işlem yapılır. Bu metin doğrudan LoadPicture işlevine parametre olarak verilebilir.
A2 hücresindeki dosya için uzantı jpg, durum ise Yüklenebilir olarak yazılır. Büyük harfle yazılmış uzantılar da LCase sayesinde doğru tanınır; örneğin A3 hücresi için uzantı gif bulunur. PNG ve PDF gibi satırların durumuna C5 ile C7 hücrelerinden bakabilirsiniz.
UrunResminiGoster çalıştığında önce Dir ile dosyanın varlığı denetlenir. Dosya varsa LoadPicture resmi belleğe yükler, Image denetimine atar ve form ekrana gelir; resim, PictureSizeMode ayarı sayesinde oranı bozulmadan denetime sığdırılır. Dosya yoksa bir uyarı gösterilir ve işlem durdurulur. ResmiTemizle makrosu ise denetimdeki resmi kaldırır.
Söz dizimi
İşlevin genel biçimi şöyledir:
VBA
2 satır
Set nesne = LoadPicture(DosyaAdi, [Boyut], [RenkDerinligi], [X], [Y])
Denetim.Picture = LoadPicture(DosyaAdi)
- DosyaAdi: Yüklenecek resim dosyasının tam yolu ve adıdır. Boş metin ("") verilirse denetimdeki resim temizlenir.
- Boyut: İsteğe bağlıdır. Yalnızca simge (ico) ve imleç (cur) dosyalarında anlamlıdır; istenen simge boyutunu belirler. Değerler 0 (küçük), 1 (büyük, varsayılan), 2 (kabuk küçük), 3 (kabuk büyük) ve 4 (özel) olarak bilinir. Excel VBA'da bu değerlerin sabit adları her zaman tanınmayabilir, bu yüzden sayısal değerleri kullanın.
- RenkDerinligi: İsteğe bağlıdır. Yalnızca simge ve imleç dosyalarında kullanılır. 0 varsayılan, 1 tek renk, 2 VGA renk, 3 tam renk anlamına gelir.
- X, Y: İsteğe bağlıdır. Boyut için 4 (özel) seçildiğinde istenen genişlik ve yüksekliği verir.
Dönüş değeri ve desteklenen biçimler
LoadPicture bir StdPicture (IPictureDisp) nesnesi döndürür. Bu nesne bir hücreye ya da değişkene değer olarak yazılamaz; yalnızca Picture özelliği olan nesnelere atanır. Nesne atamasında Set deyimi, doğrudan özellik atamasında ise Picture özelliği kullanılır.İşlev; bmp, gif, jpg, ico, cur, wmf ve emf dosyalarını yükler. PNG desteği Office sürümüne ve denetime göre değişebilir; kullanmadan önce kendi bilgisayarınızda deneyin. Dosya bulunamazsa 53 numaralı "Dosya bulunamadı" hatası, dosya geçerli bir resim değilse 481 numaralı "Geçersiz resim" hatası oluşur.
Nerede kullanılır, nerede kullanılmaz
- UserForm: Image denetiminin Picture özelliğine atanır; ürün fotoğrafı, logo gibi resimler kullanıcı seçimine göre gösterilir.
- Sayfadaki ActiveX Image: Geliştirici > Ekle > ActiveX Denetimleri > Resim (Developer > Insert > ActiveX Controls > Image) ile eklenen denetimde de aynı şekilde çalışır.
- Hücre ve normal şekiller: Çalışma sayfasına resim eklemek için LoadPicture kullanılmaz; bunun için Shapes.AddPicture yöntemi kullanılır.
1. Resim dosyalarının tam yolunu oluşturma
Ürün listesinde her ürünün resim dosya adı C sütunundadır. Resimler tek bir klasörde durduğundan, LoadPicture işlevine verilecek tam yolu D sütununda hazırlıyoruz. Kodu standart bir modüle yapıştırın ve çalıştırın. Bu örnek resmin kendisini yüklemez, yalnızca işleve verilecek yolu üretir.
VBA
18 satır
Option Explicit
Sub TamYolOlustur()
Dim ws As Worksheet
Dim klasor As String
Dim son As Long
Dim i As Long
Set ws = ActiveSheet
' Resimlerin bulunduğu klasör (sonunda ters bölü olmalı)
klasor = "C:\Resim\"
son = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
For i = 2 To son
' Klasör ve dosya adını birleştirip D sütununa yaz
ws.Cells(i, "D").Value = klasor & ws.Cells(i, "C").Value
Next i
End Sub
LoadPicture
Formülünü incelemek için bir hücre seçin.| A | B | C | D | |
|---|---|---|---|---|
| 1 | Ürün Kodu | Ürün Adı | Dosya Adı | Tam Yol |
| 2 | U001 | Kablosuz Kulaklık | kulaklik.jpg | C:\Resim\kulaklik.jpg |
| 3 | U002 | Mekanik Klavye | klavye.jpg | C:\Resim\klavye.jpg |
| 4 | U003 | Optik Fare | fare.gif | C:\Resim\fare.gif |
| 5 | U004 | Web Kamerası | kamera.bmp | C:\Resim\kamera.bmp |
| 6 | U005 | Dizüstü Çanta | canta.jpg | C:\Resim\canta.jpg |
| 7 | U006 | Monitör Standı | stand.jpg | C:\Resim\stand.jpg |
Ürün ResimleriExcelDepo v1.0.0
2. Uzantıya göre yüklenebilirlik kontrolü
Kullanıcının seçtiği dosyaları LoadPicture ile yüklemeden önce uzantılarını denetlemek hata almanızı önler. Aşağıdaki makro, A sütunundaki dosya adlarının uzantısını B sütununa, işlevin yükleyip yükleyemeyeceğine dair durumu C sütununa yazar. Kodu standart bir modüle yapıştırın.
VBA
34 satır
Option Explicit
Sub UzantiKontrol()
Dim ws As Worksheet
Dim ad As String
Dim uzanti As String
Dim p As Long
Dim son As Long
Dim i As Long
Set ws = ActiveSheet
son = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
For i = 2 To son
ad = ws.Cells(i, "A").Value
' Son noktanın konumunu bul
p = InStrRev(ad, ".")
If p > 0 Then
uzanti = LCase(Mid(ad, p + 1))
Else
uzanti = ""
End If
ws.Cells(i, "B").Value = uzanti
Select Case uzanti
Case "bmp", "gif", "jpg", "jpeg", "ico", "cur", "wmf", "emf"
ws.Cells(i, "C").Value = "Yüklenebilir"
Case "png"
ws.Cells(i, "C").Value = "Sürüme göre değişir, deneyin"
Case Else
ws.Cells(i, "C").Value = "Desteklenmez"
End Select
Next i
End Sub
LoadPicture
Formülünü incelemek için bir hücre seçin.| A | B | C | |
|---|---|---|---|
| 1 | Dosya Adı | Uzantı | Durum |
| 2 | logo.jpg | jpg | Yüklenebilir |
| 3 | harita.GIF | gif | Yüklenebilir |
| 4 | tablo.bmp | bmp | Yüklenebilir |
| 5 | urun.png | png | Sürüme göre değişir, deneyin |
| 6 | sema.wmf | wmf | Yüklenebilir |
| 7 | rapor.pdf | Desteklenmez | |
| 8 | foto.tiff | tiff | Desteklenmez |
Dosya KontrolüExcelDepo v1.0.0
3. UserForm üzerindeki Image denetimine resim yükleme
Bu örnekte frmUrun adlı bir UserForm'a imgUrun adlı bir Image denetimi eklediğinizi varsayıyoruz. Aşağıdaki kodu standart bir modüle yapıştırın. Makro dosya işlemi ve form gösterimi içerdiği için örnek sayfada çalıştırılmaz; sonucu aşağıda sözle anlatıyoruz.
VBA
25 satır
Option Explicit
Sub UrunResminiGoster()
Dim yol As String
' Gösterilecek resmin tam yolu
yol = "C:\Resim\kulaklik.jpg"
' Dosya yoksa hata almamak için önce denetle
If Dir(yol) = "" Then
MsgBox "Resim dosyası bulunamadı.", vbExclamation
Exit Sub
End If
With frmUrun
.imgUrun.PictureSizeMode = fmPictureSizeModeZoom
.imgUrun.Picture = LoadPicture(yol)
.Show
End With
End Sub
Sub ResmiTemizle()
' Boş metin verilirse denetimdeki resim kaldırılır
frmUrun.imgUrun.Picture = LoadPicture("")
End Sub
LoadPicture
Formülünü incelemek için bir hücre seçin.| A | B | C | |
|---|---|---|---|
| 1 | Ürün | Resim Dosyası | Stok |
| 2 | Kablosuz Kulaklık | kulaklik.jpg | 120 |
| 3 | Mekanik Klavye | klavye.jpg | 85 |
| 4 | Optik Fare | fare.gif | 240 |
Ürün KataloğuExcelDepo v1.0.0
Kullanırken dikkat edin
- Dosya yolunu denetleyin: Dosya yoksa 53 numaralı hata oluşur. Yüklemeden önce Dir işleviyle dosyanın varlığını denetleyin ya da On Error ile hatayı yakalayın.
- Hücreye resim yüklemek için kullanılmaz: LoadPicture bir nesne döndürür, hücreye değer olarak yazılamaz. Çalışma sayfasına resim eklemek için Shapes.AddPicture yöntemini kullanın.
- Geçersiz resim hatası: Dosya bozuksa ya da desteklenmeyen bir biçimdeyse (örneğin PDF, TIFF) 481 numaralı hata alırsınız. Resmi bmp, jpg ya da gif biçimine dönüştürün.
- Ağ yolları ve bellek: Ağ paylaşımındaki büyük resimler yavaş yüklenebilir ve bellek tüketir. Çok sayıda resmi art arda yüklüyorsanız küçük boyutlu sürümlerini kullanın.
- Resim dosyaya kaydedilmez: Kodla yüklenen resim çalışma kitabına kalıcı olarak gömülmez; kod her çalıştığında yeniden yüklenir. Resim dosyalarını kitapla birlikte taşımayı unutmayın.
- İlgili konular:
- Shapes.AddPicture: Çalışma sayfasına resim ekleme yöntemi
- Image denetimi: Picture ve PictureSizeMode özellikleri
- UserForm: Form tasarımı ve Show yöntemi
- Dir: Dosyanın var olup olmadığını denetleme
- SavePicture: Resim nesnesini dosyaya kaydetme
- InStrRev: Dosya adındaki uzantıyı bulma