Soru Sayfa İsimlerini Alfabetik Olarak Listbox'ta Listelemek

Tasarım

Altın Üye
Katılım
3 Şubat 2005
Mesajlar
275
Excel Vers. ve Dili
Microsoft Excel 2013 32Bit Türkçe
Altın Üyelik Bitiş Tarihi
16-11-2025
Arkadaşlar personel izin takibi ile ilgili bir proje üzerinde çalışıyorum. Yaklaşık 25 kişilik personel isimlerinden oluşan sayfalar var ve ben bu sayfa isimlerini alfabetik olarak Listbox'ta sıralamak istiyorum. Bu konu hakkında yardımcı olabilecek arkadaşlara şimdiden teşekkür ederim.
 

volki_112

Altın Üye
Katılım
29 Eylül 2023
Mesajlar
130
Excel Vers. ve Dili
2019 Türkçe
Altın Üyelik Bitiş Tarihi
13-12-2029
Kod:
Private Sub Sayfalari_Listele()

    Dim ws As Worksheet
    
    ' ListBox'ı temizle
    ListBox1.Clear
    
    ' Excel dosyasındaki tüm sayfa isimlerini al ve ListBox'a ekle
    For Each ws In ThisWorkbook.Worksheets
        ListBox1.AddItem ws.Name
    Next ws
    
End Sub
 

Necdet

Moderatör
Yönetici
Katılım
4 Haziran 2005
Mesajlar
15,418
Excel Vers. ve Dili
Ofis 365 Türkçe
Merhaba,
Chat GPT'nin yanıtı :

Kod:
Private Sub UserForm_Initialize()
    Dim ws As Worksheet
    Dim wsNames() As String
    Dim i As Long, j As Long
    Dim temp As String
    
    ' Çalışma kitabındaki sayfa isimlerini bir diziye aktar
    ReDim wsNames(1 To ThisWorkbook.Sheets.Count)
    i = 1
    For Each ws In ThisWorkbook.Sheets
        wsNames(i) = ws.Name
        i = i + 1
    Next ws
    
    ' Sayfa isimlerini alfabetik olarak sırala
    For i = LBound(wsNames) To UBound(wsNames) - 1
        For j = i + 1 To UBound(wsNames)
            If wsNames(i) > wsNames(j) Then
                temp = wsNames(i)
                wsNames(i) = wsNames(j)
                wsNames(j) = temp
            End If
        Next j
    Next i
    
    ' ListBox'a sıralanmış isimleri ekle
    For i = LBound(wsNames) To UBound(wsNames)
        ListBox1.AddItem wsNames(i)
    Next i
End Sub
 

volki_112

Altın Üye
Katılım
29 Eylül 2023
Mesajlar
130
Excel Vers. ve Dili
2019 Türkçe
Altın Üyelik Bitiş Tarihi
13-12-2029
aynı cevabı bana verdi :). Alfabetik sıralamaya gerek yok dedim ben de
Merhaba,
Chat GPT'nin yanıtı :

Kod:
Private Sub UserForm_Initialize()
    Dim ws As Worksheet
    Dim wsNames() As String
    Dim i As Long, j As Long
    Dim temp As String
  
    ' Çalışma kitabındaki sayfa isimlerini bir diziye aktar
    ReDim wsNames(1 To ThisWorkbook.Sheets.Count)
    i = 1
    For Each ws In ThisWorkbook.Sheets
        wsNames(i) = ws.Name
        i = i + 1
    Next ws
  
    ' Sayfa isimlerini alfabetik olarak sırala
    For i = LBound(wsNames) To UBound(wsNames) - 1
        For j = i + 1 To UBound(wsNames)
            If wsNames(i) > wsNames(j) Then
                temp = wsNames(i)
                wsNames(i) = wsNames(j)
                wsNames(j) = temp
            End If
        Next j
    Next i
  
    ' ListBox'a sıralanmış isimleri ekle
    For i = LBound(wsNames) To UBound(wsNames)
        ListBox1.AddItem wsNames(i)
    Next i
End Sub
 

Tasarım

Altın Üye
Katılım
3 Şubat 2005
Mesajlar
275
Excel Vers. ve Dili
Microsoft Excel 2013 32Bit Türkçe
Altın Üyelik Bitiş Tarihi
16-11-2025
Kod:
Private Sub Sayfalari_Listele()

    Dim ws As Worksheet
   
    ' ListBox'ı temizle
    ListBox1.Clear
   
    ' Excel dosyasındaki tüm sayfa isimlerini al ve ListBox'a ekle
    For Each ws In ThisWorkbook.Worksheets
        ListBox1.AddItem ws.Name
    Next ws
   
End Sub
Sanırım sorumu yanlış anladınız. Sayfaları ben zaten listboxa aldırıyorum, listboxa alınan sayfaların alfabetik olarak sıralanmasını sormuştum.
 

volki_112

Altın Üye
Katılım
29 Eylül 2023
Mesajlar
130
Excel Vers. ve Dili
2019 Türkçe
Altın Üyelik Bitiş Tarihi
13-12-2029
Sanırım sorumu yanlış anladınız. Sayfaları ben zaten listboxa aldırıyorum, listboxa alınan sayfaların alfabetik olarak sıralanmasını sormuştum.
3 numaralı mesajtaki kod alfabetik olarak listeler. O işinizi görmezse kodunuzu buraya yazın. alfabetik kısmını ekleyelim.
 

Tasarım

Altın Üye
Katılım
3 Şubat 2005
Mesajlar
275
Excel Vers. ve Dili
Microsoft Excel 2013 32Bit Türkçe
Altın Üyelik Bitiş Tarihi
16-11-2025
Merhaba,
Chat GPT'nin yanıtı :

Kod:
Private Sub UserForm_Initialize()
    Dim ws As Worksheet
    Dim wsNames() As String
    Dim i As Long, j As Long
    Dim temp As String
   
    ' Çalışma kitabındaki sayfa isimlerini bir diziye aktar
    ReDim wsNames(1 To ThisWorkbook.Sheets.Count)
    i = 1
    For Each ws In ThisWorkbook.Sheets
        wsNames(i) = ws.Name
        i = i + 1
    Next ws
   
    ' Sayfa isimlerini alfabetik olarak sırala
    For i = LBound(wsNames) To UBound(wsNames) - 1
        For j = i + 1 To UBound(wsNames)
            If wsNames(i) > wsNames(j) Then
                temp = wsNames(i)
                wsNames(i) = wsNames(j)
                wsNames(j) = temp
            End If
        Next j
    Next i
   
    ' ListBox'a sıralanmış isimleri ekle
    For i = LBound(wsNames) To UBound(wsNames)
        ListBox1.AddItem wsNames(i)
    Next i
End Sub
Teşekkür ediyorum sayın Necdet bey.
 

Tasarım

Altın Üye
Katılım
3 Şubat 2005
Mesajlar
275
Excel Vers. ve Dili
Microsoft Excel 2013 32Bit Türkçe
Altın Üyelik Bitiş Tarihi
16-11-2025
3 numaralı mesajtaki kod alfabetik olarak listeler. O işinizi görmezse kodunuzu buraya yazın. alfabetik kısmını ekleyelim.
#3 numaralı kodda sanırım büyük küçük harf duyarlılığı var bu yüzden o da işimi görmedi maalesef, çok önemli değil ama olsaydı iyi olurdu diye düşünüyorum.
 

volki_112

Altın Üye
Katılım
29 Eylül 2023
Mesajlar
130
Excel Vers. ve Dili
2019 Türkçe
Altın Üyelik Bitiş Tarihi
13-12-2029
#3 numaralı kodda sanırım büyük küçük harf duyarlılığı var bu yüzden o da işimi görmedi maalesef, çok önemli değil ama olsaydı iyi olurdu diye düşünüyorum.
büyük küçük harfe dikkat etmesin mi istiyorsunuz.
 

volki_112

Altın Üye
Katılım
29 Eylül 2023
Mesajlar
130
Excel Vers. ve Dili
2019 Türkçe
Altın Üyelik Bitiş Tarihi
13-12-2029
aşağıdaki kod büyük küçük harf ayrımı yapmadan sıralama yapar.
#3 numaralı kodda sanırım büyük küçük harf duyarlılığı var bu yüzden o da işimi görmedi maalesef, çok önemli değil ama olsaydı iyi olurdu diye düşünüyorum.
Kod:
Private Sub UserForm_Initialize()
    Dim ws As Worksheet
    Dim wsNames() As String
    Dim i As Long, j As Long
    Dim temp As String
    
    ' Çalışma kitabındaki sayfa isimlerini bir diziye aktar
    ReDim wsNames(1 To ThisWorkbook.Sheets.Count)
    i = 1
    For Each ws In ThisWorkbook.Sheets
        wsNames(i) = ws.Name
        i = i + 1
    Next ws
    
    ' Sayfa isimlerini alfabetik olarak sırala (Büyük/Küçük harfe duyarsız)
    For i = LBound(wsNames) To UBound(wsNames) - 1
        For j = i + 1 To UBound(wsNames)
            If StrComp(wsNames(i), wsNames(j), vbTextCompare) > 0 Then
                temp = wsNames(i)
                wsNames(i) = wsNames(j)
                wsNames(j) = temp
            End If
        Next j
    Next i
    
    ' ListBox'a sıralanmış isimleri ekle
    For i = LBound(wsNames) To UBound(wsNames)
        ListBox1.AddItem wsNames(i)
    Next i
End Sub
 

Necdet

Moderatör
Yönetici
Katılım
4 Haziran 2005
Mesajlar
15,418
Excel Vers. ve Dili
Ofis 365 Türkçe
Benim Önerim şu olur:
Bu tür işlemlerde genelde bir sayfa açarım ve adını da "Parametre" koyarım.
Bu sayfaya dosyadaki sayfa isimlerini makroyla yazdırır ve sıralama yaptırırım.
Hem Türkçe karakterler hem Büyük/Küçük karakter sorunu olmaz, hem de Form kodlarında fazladan işlem yapılmamış olur.
 
Üst