Combobox formülü

Katılım
4 Nisan 2008
Mesajlar
9
Excel Vers. ve Dili
Excel 2007
Arkadaşlar, Sayfa 1 i diğer 19 sayfayı oluşturacağım bir combobox aracılığıyla görüntüleyebileceğim bir ana sayfa olarak kullanmak istiyorum şeklindeki konu başlığımda bana aşağıda gönderilen iki formülü çalışma kitabıma uyguladım.

Sub Sayfalari_Listeleme_Makrosu()
Dim sh As Worksheet
With Sheets("Sayfa1").ComboBox1
.Clear
For Each sh In ThisWorkbook.Worksheets
.AddItem sh.Name
Next
.ListIndex = 0
End With
End Sub
Sub Auto_Open()
Call Sayfalari_Listeleme_Makrosu
End Sub

Ve

Private Sub ComboBox1_Change()
On Error Resume Next
Sheets(ComboBox1.Text).Select
End Sub
Private Sub Worksheet_Activate()
Call Sayfalari_Listeleme_Makrosu
End Sub

bu formüller tek bir sayfaya uguladığımda gayet güzel çalışıyor. Ancak aynı çalışma kitabında birden fazla sayfaya uygaladığımda hata veriyor.Bu problemi ikinci formüldeki Call Sayfalari_Listeleme_Makrosu kısmını çıkartarak kısmen çözmüş gibi oldum ancak şimdide çalışma kitabını her kapayıp açtığımda combobox lar işlemez hale geliyor ve her sayfa için oluşturduğum modülleri tekrar çalıştırmam gerekiyor. Bu sorunu çözebilmem için yardımcı olurmusunuz lütfen.Birde her sayfada bir combobox oluşturmak için her sayfa için ayrı bir modul tanımlamam gereklimidir yoksa bunu başka bir şekille çözebilirmiyim. Yardımcı olabilir diye çalışma kitabımıda ekliyorum Yardımlarınız için şimdiden teşekkür ederim.

Oğuz Bozkurt
 
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
Bahsettiğiniz işlem için neredeyse bütün sayfalara kod yazmak gerekir. Bunun yerine Class Module ile tüm işleri otomatikleştirebilirsiniz. Proje şu şekilde oluşturulmuştur.

Dosyanızdaki tüm kodları sildikten sonra;

Standart bir Modul Sayfası ekleyin (Module1) ve aşağıdakileri kopyalayın.

Kod:
Public arrSh()
Public Cmbler() As Class1
[COLOR=green]'-------------------------
[/COLOR]Sub auto_open()
Dim sh As Worksheet
Dim x As Integer
For Each sh In ThisWorkbook.Worksheets
    x = x + 1
    ReDim Preserve arrSh(1 To x)
    arrSh(x) = sh.Name
Next
Call Gorev_Ata
End Sub
[COLOR=green]'-----------------------[/COLOR]
Sub Gorev_Ata()
Dim sh As Worksheet
Dim oleO As OLEObject
Dim cb As MSForms.ComboBox
Dim x As Integer
For Each sh In ThisWorkbook.Worksheets
    For Each oleO In sh.OLEObjects
        If oleO.OLEType = 2 Then
            If TypeOf oleO.Object Is MSForms.ComboBox Then
                oleO.Object.List = arrSh
                
                x = x + 1
                ReDim Preserve Cmbler(1 To x)
                Set Cmbler(x) = New Class1
                Set Cmbler(x).Cmb = oleO.Object
            End If
        End If
    Next
Next
End Sub
Daha sonra bir Class Module sayfası ekleyin (Class1) ve aşağıdakileri kopyalayın.

Kod:
Option Explicit
Public WithEvents Cmb As ComboBox
Private Sub Cmb_Change()
    Sheets(Cmb.Value).Select
End Sub

Ayrıca; Ekteki dosyayı inceleyiniz.
 
Katılım
4 Nisan 2008
Mesajlar
9
Excel Vers. ve Dili
Excel 2007
Çok teşekkür ederim

Ferhat Bey ilginize sonsuz teşekkür ederim beni önemli bir dertten kurtardınız.Elinize bilginize sağlık.Visucal Basic için bu konuları kapsayan bir kaynak önerebilirmisiniz
 
Üst