• DİKKAT

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

Soru Sayfa İsimlerini Alfabetik Olarak Listbox'ta Listelemek

Katılım
3 Şubat 2005
Mesajlar
294
Excel Vers. ve Dili
Microsoft Excel 2013 32Bit Türkçe
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.
 
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
 
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
 
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
 
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.
 
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.
 
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.
 
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.
 
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
 
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.
 
Geri
Üst