• DİKKAT

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

Combobox VBA ile ilgili bir soru

Katılım
2 Ekim 2010
Mesajlar
33
Excel Vers. ve Dili
2010
Merhaba,

Ekte deneme isimli dosyamda "malzeme cinsi sütununa bir combobox ekleyerek "malzemeler " sayfasındaki stok kartlarını buradan buldurmaya çalıştım. Bu uygulama başarı ile çalışıyor. Seçtiğim stok kartına görede markayı düşey ara ile bulduruyorum. Fakat bu noktada bir eksik var oda şu:

Bazı malzemeler ortak isimli olup markaları farlılaşmaktadır. Örneğin "Darbe Akım Şalteri 16A 1NO" gibi. Bu malzeme ad olarak aynı fakat aynı ada sahip iki marka ve malzeme kodu bulunmaktadır. "Malzemeler "sayfasında buna benzer malzeme çok miktarda var.

Öğrenmek istediğim şu: malzeme adını seçince sadece o malzemeye ait "marka" ve "malzeme kodu" nu marka sütununda comboboxta göstersin (listede sadece yukarıdaki malzeme için 5TT4101-0 SIEMENS, Z-S230/S EATON gelecektir.) seçim yaptığımda da markayı marka sütununda ilgili malzemenin karşısına yazmasını istiyorum. Böylelikle kullanıcı malzeme seçimini yaptıktan sonra marka sütunundaki comboboxa tıkladığında o malzemeye ait marka ve malzeme kodlarını görecek. Böylelikle birini seçip alt satırda başka malzeme tanımlamaya devam edecek.

Yardımcı olursanız çok sevinirim.

Aşağıda malzeme cinsi sütunundaki comboboxda yazılı olan kodu göreceksiniz. buna ek olarak marka sütununda bir combobox ihtiyacım var.

Kod:
Private Sub Emre_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
   If KeyCode = 13 Then
      nvE.Visible = False
      ActiveCell.Offset(1, 0).Select
   End If
End Sub
 
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   On Error Resume Next
   Set nvE = ActiveSheet.OLEObjects("Emre")
   On Error GoTo 0
   If nvE Is Nothing Then
      With ActiveSheet.OLEObjects.Add(ClassType:="Forms.ComboBox.1", _
                                      Width:=Target.Width, _
                                      Height:=Target.Height)
         .Name = "Emre"
      End With
      Set nvE = ActiveSheet.OLEObjects("Emre")
   End If
 
   Set Target = Intersect(Target, Range("B17:B2500"))
   If Target Is Nothing Then
      nvE.Visible = False
      nvE.LinkedCell = ""
      Exit Sub
   ElseIf Target.Count > 1 Or Target.Row = 1 Then
      nvE.Visible = False
      nvE.LinkedCell = ""
      Exit Sub
   End If
 
   With nvE
      Application.ScreenUpdating = False
      .Top = Target.Top
      .Left = Target.Left
      .ListFillRange = "veri"
      .LinkedCell = Target.Address
      .Enabled = True
      .Visible = True
      .Activate
   End With
End Sub

Selamlar,
 

Ekli dosyalar

Module içerisine;
Kod:
Public con As Object

Public Sub baglan()
    Set con = CreateObject("adodb.connection")
    con.Open "provider=microsoft.jet.oledb.4.0;data source=" _
    & ThisWorkbook.FullName & ";extended properties=""excel 8.0;hdr=yes"""
End Sub
ThisWrokbook (BuÇalışmaKitabı) içerisine;
Kod:
Private Sub Workbook_Open()
    Call baglan
    Sayfa1.ComboBox1.Column = con.Execute("select distinct(Malzeme) from [Malzemeler$] where not isnull(Malzeme)").getrows
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Sayfa1.ComboBox1.Value = "": Sayfa1.ComboBox2.Value = ""
    Set con = Nothing
End Sub
Teklif sayfasının kod penceresine;
Kod:
Private Sub ComboBox1_Change()
    If Sayfa1.ComboBox1.Value = Empty Then Exit Sub
    Call baglan
    Sayfa1.ComboBox2.Value = ""
    Sayfa1.ComboBox2.Column = con.Execute("select distinct ([Marka]) from [Malzemeler$] where [Malzeme]='" & Sayfa1.ComboBox1.Text & "'").getrows
    ActiveCell.Value = Sayfa1.ComboBox1.Value
    ActiveCell.Offset(0, 1).Select
End Sub

Private Sub ComboBox1_DropButtonClick()
    Sayfa1.ComboBox1.ListRows = 15
End Sub

Private Sub ComboBox2_Change()
    If Sayfa1.ComboBox2.Value = Empty Then Exit Sub
    On Error Resume Next
    ActiveCell.Offset(0, 1).Value = con.Execute("select [Malzeme Kodu] from [Malzemeler$] where [Malzeme]='" & Sayfa1.ComboBox1.Text & "' and [Marka]='" & Sayfa1.ComboBox2.Text & "'").getrows
    ActiveCell.Value = Sayfa1.ComboBox2.Text
End Sub

Private Sub ComboBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
   If KeyCode = 13 Then
        ActiveCell.Value = Sayfa1.ComboBox2.Text
        ActiveCell.Offset(0, 1).Select
    End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Column = 2 And Target.Row >= 19 And Target.Row <= 38 Then
        Sayfa1.ComboBox1.Top = Target.Top
        Sayfa1.ComboBox1.Left = Target.Left
        Sayfa1.ComboBox1.Visible = True
            Else
        Sayfa1.ComboBox1.Visible = False
    End If

    If Target.Column = 3 And Target.Row >= 19 And Target.Row <= 38 Then
        Sayfa1.ComboBox2.Top = Target.Top
        Sayfa1.ComboBox2.Left = Target.Left
        Sayfa1.ComboBox2.Visible = True
            Else
        Sayfa1.ComboBox2.Visible = False
    End If
End Sub
 

Ekli dosyalar

Bazı harflere basıldığında comboboxtan atıyor

Merhaba Murat hocam,

Yaptığınız çalışma mükemmel çalışıyor. Birkaç deneme yaptığımda bazı harflere tıkladığımda comboboxtan atıp yan hücreye geçiyor. Mesela a, d, r,b gibi harflere basılında hücre değişiyor. Bunun sebebi ne olabilir acaba.?

Emeğiniz için tekrar teşekkürler,

Selamlar,
 
ComboBox1_Change olayındaki şu kodu silip deneyiniz;

Kod:
    ActiveCell.Offset(0, 1).Select
 
Rica ederim, iyi günler...
 
Combobox ufak geliştirme ve revizyonlar

Murat hocam merhaba tekrar.

Ekte sizin hazırladığınız kodlarla çalışan combobox var. Birkaç ek geliştirme ve revizyona ihtiyacım var. Eğer ufak tefek bu sorunlar konusunda bana çözüm verebilirseniz dosyam sorunsuz çalışacak.

Örneğin:

1-Malzemeler sayfasının en altına yeni bir malzeme tanımladığımda bunu "Teklif" sayfasından seçmek istediğimde hata veriyor. Mesela "Zil botunu" tanımladım. Bunu teklif sayfasında seçmek istediğimde hata veriyor.

2-Örneğin "Teklif" sayfasında B19 hücresinde "Kondansatör 400V 25 Kvar " malzemesini seçti. Daha sonra bu ürüne ait markayıda "Marka" sütunu hücresinden seçti ve aşağıdaki hücreleride doldurarak devam etti. Fakat daha sonra B19 hücresindeki malzemeyi yanlış tanımladığını anladı. Dönüp B19 hücresindeki malzemeyi değiştirdiğinde "Marka" ve "Malzeme Kodu" sütunlarındaki eski değerler eski malzemenin tanımları olarak kalıyor. İstediğim şu: Malzeme değiştiğinde marka ve malzeme kodu boşalsın ve kullanıcı marka sütunundan yeni girdiği malzemeyi seçsin istiyorum. Umarım anlatabilmişimdir.

3-Her zaman "teklif" sayfasında malzeme adı kısmında en son neyi listeye eklediysem ondan sonraki boş veya dolu satıra geldiğimde yine en son tanımlanan malzeme geliyor. Boş veya dolu başka satıra gidildiğinde combobox içi de boşalabilir mi?


Bu konularda yardımcı olursanız çok sevinirim. Yardımınız için şimdiden teşekkür ederim.

Selamlar,
 

Ekli dosyalar

Murat hocam merhaba sizlere ihtiyacımız var. Yardımcı olabilirseniz çok sevinirim.
 
Uzun zamandır giremedim siteye Sn. mengene, o nedenle sorunuzu yeni gördüm ama ancak yarın ilgilenebileceğim.

Saygılar...
 
Murat hocam merhaba. Bakabildiniz mi acaba?
 
Geri
Üst