• DİKKAT

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

Sayfa içindeki Combobox'ta Controls Özelliği Sorunu

Katılım
5 Ocak 2009
Mesajlar
1,586
Excel Vers. ve Dili
2003 Türkçe
Selam Arkadaşlar,
Sayfa içinde 7 tane Combobox'um var. Adları Combobox1,Combobox2,....Combobox7 diye gidiyor.

Controls Özelliği ile aşağıdaki döngüyü kullanmak istiyorum. Ancak yapamıyorum.
Aynı olayı Userform üzerindeki combobox'lara yapıyorum. sorun olmuyor. 1'den 7'ye kadar olan combobxlareı nasıl konterol edebilirim.?
Kod:
For i = 1 To 7

If Controls("ComboBox" & i).Text = "" Then

MsgBox "Verileri Eksik Girdiniz!", vbCritical

Exit Sub

End If

Next j
İyi çalışmalar.
 
Kod:
For i = 1 To 7

    If Sheets("Sayfa1").Shapes("ComboBox" & i).AlternativeText = "" Then

    MsgBox "Verileri Eksik Girdiniz!", vbCritical

    Exit Sub

    End If
Next j
 
Kod:
For i = 1 To 7

    If Sheets("Sayfa1").Shapes("ComboBox" & i).AlternativeText = "" Then

    MsgBox "Verileri Eksik Girdiniz!", vbCritical

    Exit Sub

    End If
Next j

Selam ilginize çok teşekkür ederim. Ancak, combobox'lar dolu da olsa boş da olsa "Verileri Eksik Girdiniz!" diye uyarı veriyor.
AlternativeText yerine Value veya text de olmuyor.
İyi çalışmalar.
 
bunu denermisiniz.

Private Sub CommandButton1_Click()
Dim Bak As String
Dim Uzunluk As Byte
Bak = "ComboBox"
Uzunluk = Len(Bak)
For n = 1 To ActiveSheet.Shapes.Count
deg = TypeName(ActiveSheet.Shapes(n).OLEFormat.Object.Object)
If Mid(deg, 1, Uzunluk) = Bak Then
If ActiveSheet.Shapes(n).OLEFormat.Object.Object = "" Then
MsgBox "Verileri Eksik Girdiniz!", vbCritical
Exit Sub
End If
End If
Next n
End Sub
 
Selam Sayın Halit3,
Yardımlarınız için çok teşekkür ederim ama, verdiğiniz kodlar olmadı. Comboboxlar boş da olsa "Verileri Eksik Girdiniz!" uyarısı vermiyor. Belki de ben beceremiyorum.
Sağlık olsun. Mecburen sorgulamayı tek tek yapacağım.

İyi çalışmalar.
 
Selamlar,

Aşağıdaki kodu denermisiniz.

Kod:
Option Explicit
 
Sub COMBOBOX_KONTROL()
    Dim NESNE As OLEObject
       
    For Each NESNE In Sheets("Sayfa1").OLEObjects
        If NESNE.OLEType = 2 Then
            If TypeOf NESNE.Object Is MsForms.ComboBox Then
                If NESNE.Object.Value = "" Then
                    MsgBox "Verileri Eksik Girdiniz!", vbCritical
                    NESNE.Activate
                    Exit Sub
                End If
            End If
        End If
    Next
End Sub
 

Ekli dosyalar

ekli dosyaya bir bakınız.

Private Sub CommandButton1_Click()
sat = 0
For n = 1 To ActiveSheet.Shapes.Count
If TypeName(ActiveSheet.Shapes(n).OLEFormat.Object.Object) = "ComboBox" Then
sat = sat + 1
If ActiveSheet.Shapes(n).OLEFormat.Object.Object = "" Then
MsgBox "ComboBox" & sat & " Verisini Eksik Girdiniz!", vbCritical, "U Y A R I"
Exit Sub
End If
End If
Next
End Sub
 

Ekli dosyalar

Selamlar,

Aşağıdaki kodu denermisiniz.

Kod:
Option Explicit
 
Sub COMBOBOX_KONTROL()
    Dim NESNE As OLEObject
       
    For Each NESNE In Sheets("Sayfa1").OLEObjects
        If NESNE.OLEType = 2 Then
            If TypeOf NESNE.Object Is MsForms.ComboBox Then
                If NESNE.Object.Value = "" Then
                    MsgBox "Verileri Eksik Girdiniz!", vbCritical
                    NESNE.Activate
                    Exit Sub
                End If
            End If
        End If
    Next
End Sub

Sayın Korhan Ayhan Hocam,
Çok teşekkür ederim. ellerinize sağlık. For Each ve OLEObjects anlamları nedir?
ne işe yarar biraz bahsedebilir misiniz?
İyi çalışmalar.
 
ekli dosyaya bir bakınız.

Selam Sayın Halit3 Hocam,
Ellerinize sağlık çok teşekkür ederim. İstediğim tümü boş olduğu zaman uyarı vermesi idi. Ancak çözümünüz de zaten çok işe yaradı. Ayrı ayrı sorgulayıp mesaj vermesi çok güzel.
OLEFormat ve OLEFormat.Object.Object nedir? ne işe yarar? biraz bahsedebilir misiniz?
İyi çalışmalar.
 
Selamlar,

For Each-Next bir döngü ifadesidir. Normal For-Next döngüsünden yavaş çalışır.
OLEObjects komutu ile sayfadaki nesneleri yönetebiliyoruz.
 
Selam,

sayfaya eklediğim Image'ları controls ile yönetemiyorum.
bir sayfada Image1, Image2, Image3....... gibi Image'lar ekledim.
bir Module içinde de
Kod:
Image[B][COLOR="Red"]1[/COLOR][/B].Picture = LoadPicture("C:/[COLOR="Red"][B]1[/B][/COLOR].jpg")
kodları var.
kırmızı olan sayıları döngüye sokmak istiyorum. Bir türlü yapamadım.
Yardımcı olabilir misiniz?
 
Selamlar,

Aşağıdaki kodu denermisiniz.

Kod:
Option Explicit
 
Sub IMAGE_KONTROL()
    Dim NESNE As OLEObject, X As Byte
       
    For Each NESNE In Sheets("Sayfa1").OLEObjects
        If NESNE.OLEType = 2 Then
            If TypeOf NESNE.Object Is MsForms.Image Then
                For X = 1 To 5
                If Replace(NESNE.Name, "Image", "") = X Then
                    NESNE.Object.Picture = LoadPicture("C:\" & X & ".jpg")
                    NESNE.Object.PictureSizeMode = 1
                    Exit For
                End If
                Next
            End If
        End If
    Next
End Sub
 
Selamlar,

Aşağıdaki kodu denermisiniz.

Kod:
Option Explicit
 
Sub IMAGE_KONTROL()
    Dim NESNE As OLEObject, X As Byte
       
    For Each NESNE In Sheets("Sayfa1").OLEObjects
        If NESNE.OLEType = 2 Then
            If TypeOf NESNE.Object Is MsForms.Image Then
                For X = 1 To 5
                If Replace(NESNE.Name, "Image", "") = X Then
                    NESNE.Object.Picture = LoadPicture("C:\" & X & ".jpg")
                    NESNE.Object.PictureSizeMode = 1
                    Exit For
                End If
                Next
            End If
        End If
    Next
End Sub

Selam Sayın Korhan Ayhan Hocam,
Cevap için geciktiğim için çok özür dilerim. Kodlarınızı denedim. Çok iyi oldu. Çok teşekkür ederim.
Ben de forumdan alternatif olarak aşağıdaki gibi buldum.

Kod:
sat = sat + 1
Set Img = ActiveSheet.OLEObjects(sat)
        If Left(Img.Name, 5) = "Image" Then
        
        Img.Object.Picture = LoadPicture("C:/" & sat & ".jpg")
      
             
        End If

Sizin kodlarınız üzerinden birkaç soru sormak istiyorum;
Birinci Sorum:
X=1 olsun. Image1 var ancak, 1.jpg adlı resim yok. dosya yok ise, Image1 boş görünsün veya içinde "resim yok" diye yazsın. Bunu nasıl sağlayabilirim?
İkinci Sorum:
If NESNE.OLEType = 2 Then 'deki 2 sayısı nedir?
NESNE.Object.PictureSizeMode = 1 ve Exit For niçin kullanılıyor?

Herşey için çok teşekkürler.
İyi çalışmalar.
 
Selamlar,

Boş bir excel sayfası açın.
A1 hücresine "RESİM YOK" yazın. Hücre yazı boyutunu ve rengini dilediğiniz şekilde ayarlayın.
Paint programını açın.
A1 hücresini kopyalayıp Paint programındaki boş sayfaya yapıştırın.
"C" klasörüne "Resim_Yok" adıyla JPEG uzantısı ile kayıt edin.

Daha sonra aşağıdaki kodu deneyin.

Kod:
Option Explicit
 
Sub IMAGE_KONTROL()
    Dim NESNE As OLEObject, X As Byte
       
    For Each NESNE In Sheets("Sayfa1").OLEObjects
        If NESNE.OLEType = 2 Then
            If TypeOf NESNE.Object Is MSForms.Image Then
                For X = 1 To 5
                If Replace(NESNE.Name, "Image", "") = X Then
                    If Dir("C:\" & X & ".jpg") = "" Then
                        NESNE.Object.Picture = LoadPicture("C:\Resim_Yok.jpg")
                        NESNE.Object.PictureSizeMode = 1
                    Else
                        NESNE.Object.Picture = LoadPicture("C:\" & X & ".jpg")
                        NESNE.Object.PictureSizeMode = 1
                    End If
                    Exit For
                End If
                Next
            End If
        End If
    Next
End Sub


"If NESNE.OLEType = 2 Then" kodundaki 2 değeri yanlış bilmiyorsam sayfadaki tüm nesnelerden sadece "Forms" (Bu ifade ile UserForm üzerindeki nesneler belirtiliyor) özelliği olan nesneleri ayrıştırıp döngü içinde kullanmaya yarıyor. Bu komutu içeren "If" sorgusunu silsenizde kod çalışacaktır. Sadece kodu sağlamlaştırmak adına yazılmış bir sorgudur.

"NESNE.Object.PictureSizeMode = 1" kodu ise image nesnesine yüklenen resmi image nesnesinin boyutlarına göre biçimlendiriyor.

"Exit For" komutu ise "For" döngüsünden çıkmak için kullanılır. Makroda ilk olarak nesneler döngüye alınmıştır. Nesnenin adındaki "Image" yazısı silinerek sadece sayısal değere (Image2) ulaşıyoruz. Bu değeride "X" döngüsü ile sorgulayarak hangi nesneye resim yükleyeceğimizi tespit ediyoruz. Sayfada 5 image nesnesi bulunduğu için "X" döngüsü her seferinde 5 değerine kadar döngüyü sürdürecektir. Eğer bizim nesne ismindeki sayısal değerimiz 2 ise "X" döngüsünün 2 den sonra devam etmesine gerek yoktur. İşte burada devreye "Exit For" komutu devereye girmektedir. Bu komutu kullanarak X döngüsünden çık ve varsa diğer döngüye devam et diyoruz.
 
bir alternatifde benden tam 75 adet uzantıdan yani bütün resim uzantılarından rsimleri getiriyor.

Private Sub CommandButton1_Click()
Dim uzanti(75)
uzanti(1) = "bmp": uzanti(2) = "jpg": uzanti(3) = "gif": uzanti(4) = "ACT":
uzanti(5) = "AI": uzanti(6) = "ART": uzanti(7) = "AWG": uzanti(8) = "BLP":
uzanti(9) = "BMP": uzanti(10) = "CDR": uzanti(11) = "CGM": uzanti(12) = "CIT":
uzanti(13) = "CMX": uzanti(14) = "CPT": uzanti(15) = "CUT": uzanti(16) = "DDS":
uzanti(17) = "DIB": uzanti(18) = "DjVu": uzanti(19) = "DXF": uzanti(20) = "EGT":
uzanti(21) = "EMF": uzanti(22) = "EPS": uzanti(23) = "Exif": uzanti(24) = "GIF":
uzanti(25) = "ICNS": uzanti(26) = "ICO": uzanti(27) = "IFF": uzanti(28) = "ilbm":
uzanti(29) = "JNG": uzanti(30) = "JP2": uzanti(31) = "JPEG": uzanti(32) = "LBM":
uzanti(33) = "MAX": uzanti(34) = "MIFF": uzanti(35) = "MNG": uzanti(36) = "MSP":
uzanti(37) = "NITF": uzanti(38) = "OTA": uzanti(39) = "PBM": uzanti(40) = "PC1":
uzanti(41) = "PC2": uzanti(42) = "PC3": uzanti(43) = "PCF": uzanti(44) = "PCT":
uzanti(45) = "PCX": uzanti(46) = "PDN": uzanti(47) = "PGM": uzanti(48) = "PI1":
uzanti(49) = "PI2": uzanti(50) = "PI3": uzanti(51) = "PICT": uzanti(52) = "PNG":
uzanti(53) = "PNM": uzanti(54) = "PPM": uzanti(55) = "PSB": uzanti(56) = "PSD":
uzanti(57) = "PSP": uzanti(58) = "PX": uzanti(59) = "PXR": uzanti(60) = "QFX":
uzanti(61) = "RAW": uzanti(62) = "RLE": uzanti(63) = "SCT": uzanti(64) = "SGI":
uzanti(65) = "STL": uzanti(66) = "SVG": uzanti(67) = "TGA": uzanti(68) = "TIFF":
uzanti(69) = "VRML": uzanti(70) = "WMF": uzanti(71) = "X3D": uzanti(72) = "XAR":
uzanti(73) = "XBM": uzanti(74) = "XCF": uzanti(75) = "XPM":
Set s1 = Sheets("Sayfa1")
Dim Picture As Object
For Each Picture In s1.Shapes
If TypeName(s1.Shapes(Picture.Name).OLEFormat.Object.Object) = "Image" Then
sat = sat + 1
s1.Shapes(Picture.Name).OLEFormat.Object.Visible = False
s1.Shapes(Picture.Name).OLEFormat.Object.Object.Picture = LoadPicture(none)
For i = 1 To 75
resimyükle = "C:\" & sat & "." & uzanti(Val(i))
Dim ds, a
Set ds = CreateObject("Scripting.FileSystemObject")
a = ds.FileExists(resimyükle)
If a = True Then
s1.Shapes(Picture.Name).OLEFormat.Object.Visible = True
s1.Shapes(Picture.Name).OLEFormat.Object.Object.Picture = LoadPicture(resimyükle)
Exit For
Else
End If
Next i
End If
Next Picture
End Sub
 
Geri
Üst