Listview1 den Listview2 ye veri aktarma

walabi

Altın Üye
Katılım
22 Eylül 2012
Mesajlar
1,057
Excel Vers. ve Dili
excel 2010

excel 2013
Altın Üyelik Bitiş Tarihi
06-08-2025
Merhaba,

Listview1 üzerinde çift tıklama yaptığımda seçili satırın verilerinin listview2 ye aktarılmasını nasıl sağlayabilirim. Aşağıdaki kodda neyi düzeltmem gerekiyor?

Kod:
Private Sub ListView1_DblClick()
Dim a As Long


a = ListView2.ListItems.Count
x = ListView1.SelectedItem.Index

'a = a + 1

ListView2.ListItems(a).SubItems(1) = ListView1.ListItems(x).SubItems(1)



End Sub
 

muhasebeciyiz

Altın Üye
Katılım
10 Şubat 2006
Mesajlar
871
Excel Vers. ve Dili
Office 2016
64 Bit
Altın Üyelik Bitiş Tarihi
21-12-2027
Kod:
Private Sub ListView1_DblClick()
    Dim x As Long
    Dim itm As ListItem
    Dim i As Integer
   
    If Not ListView1.SelectedItem Is Nothing Then
        x = ListView1.SelectedItem.Index      
       
        Set itm = ListView2.ListItems.Add(, , ListView1.ListItems(x).Text)      
     
        For i = 1 To ListView1.ListItems(x).ListSubItems.Count
            itm.SubItems(i) = ListView1.ListItems(x).ListSubItems(i).Text
        Next i
    End If
End Sub

Private Sub ListView1_DblClick()
    Dim yeniListeOgesi As ListItem 
    Dim seciliDizin As Long          
    
    seciliDizin = ListView1.SelectedItem.Index      
    Set yeniListeOgesi = ListView2.ListItems.Add()    
    
    yeniListeOgesi.Text = ListView1.ListItems(seciliDizin).Text      
    Dim i As Long
    For i = 1 To ListView1.ListItems(seciliDizin).SubItems.Count
        yeniListeOgesi.SubItems(i) = ListView1.ListItems(seciliDizin).SubItems(i)
    Next i

End Sub

Mevcut kodunuzdaki temel sorun, ListView2'ye henüz yeni bir öğe (satır) eklemeden o öğenin alt öğelerine (SubItems) veri atamaya çalışmanızdı. Bir ListView'a veri eklerken önce yeni bir ListItem oluşturmalı, ardından o ListItem'ın ana metnini (Text özelliğini) ve varsa alt öğelerini (SubItems) doldurmalısınız.

ListView2.ListItems(a).SubItems(1) satırı var olmayan bir öğeye veri atamaya çalışıyor.
a = ListView2.ListItems.Count demek, mevcut öğe sayısını alır; ama yeni bir öğe eklemeden ona veri atayamazsınız.
x değişkeni tanımlanmamış (Dim x As Long eksik).
SubItems kullanımı sırasında 0 veya 1 index hataları olabilir.

Not: ListSubItems(i).Text kullanımı ListView'in detay modda (View = lvwReport) olması gerektiğini unutmayın.
 
Son düzenleme:

walabi

Altın Üye
Katılım
22 Eylül 2012
Mesajlar
1,057
Excel Vers. ve Dili
excel 2010

excel 2013
Altın Üyelik Bitiş Tarihi
06-08-2025
Kod:
Private Sub ListView1_DblClick()
    Dim x As Long
    Dim itm As ListItem
    Dim i As Integer
  
    If Not ListView1.SelectedItem Is Nothing Then
        x = ListView1.SelectedItem.Index     
      
        Set itm = ListView2.ListItems.Add(, , ListView1.ListItems(x).Text)     
    
        For i = 1 To ListView1.ListItems(x).ListSubItems.Count
            itm.SubItems(i) = ListView1.ListItems(x).ListSubItems(i).Text
        Next i
    End If
End Sub

Private Sub ListView1_DblClick()
    Dim yeniListeOgesi As ListItem
    Dim seciliDizin As Long         
   
    seciliDizin = ListView1.SelectedItem.Index     
    Set yeniListeOgesi = ListView2.ListItems.Add()   
   
    yeniListeOgesi.Text = ListView1.ListItems(seciliDizin).Text     
    Dim i As Long
    For i = 1 To ListView1.ListItems(seciliDizin).SubItems.Count
        yeniListeOgesi.SubItems(i) = ListView1.ListItems(seciliDizin).SubItems(i)
    Next i

End Sub

Mevcut kodunuzdaki temel sorun, ListView2'ye henüz yeni bir öğe (satır) eklemeden o öğenin alt öğelerine (SubItems) veri atamaya çalışmanızdı. Bir ListView'a veri eklerken önce yeni bir ListItem oluşturmalı, ardından o ListItem'ın ana metnini (Text özelliğini) ve varsa alt öğelerini (SubItems) doldurmalısınız.

ListView2.ListItems(a).SubItems(1) satırı var olmayan bir öğeye veri atamaya çalışıyor.
a = ListView2.ListItems.Count demek, mevcut öğe sayısını alır; ama yeni bir öğe eklemeden ona veri atayamazsınız.
x değişkeni tanımlanmamış (Dim x As Long eksik).
SubItems kullanımı sırasında 0 veya 1 index hataları olabilir.

Not: ListSubItems(i).Text kullanımı ListView'in detay modda (View = lvwReport) olması gerektiğini unutmayın.
Sayın @muhasebeciyiz konuyla son bir destek alabilir miyim.

Listview1 de ListView1.SelectedItem.SubItems(11) sütununu kontrol ederek listview2 ye aktarma yapmam gerekiyor. Yani Listview1 den daha önce listview2 ye aktarma yaptıysam tekrardan aktarma yapmaya mani olmam gerekiyor. Burada da 11. sütun verisi kontrol edilmeli. Bunu nasıl yapabilirim??
 

muhasebeciyiz

Altın Üye
Katılım
10 Şubat 2006
Mesajlar
871
Excel Vers. ve Dili
Office 2016
64 Bit
Altın Üyelik Bitiş Tarihi
21-12-2027
Kod:
Private Sub ListView1_DblClick()
    Dim yeniListeOgesi As ListItem
    Dim seciliDizin As Long
    Dim kontrolDegeri As String
    Dim i As Long
    Dim zatenVar As Boolean
    zatenVar = False

    seciliDizin = ListView1.SelectedItem.Index 
    kontrolDegeri = ListView1.ListItems(seciliDizin).SubItems(11)
 
    Dim item As ListItem
    For Each item In ListView2.ListItems
        If item.SubItems.Count >= 11 Then
            If item.SubItems(11) = kontrolDegeri Then
                zatenVar = True
                Exit For
            End If
        End If
    Next item
 
    If zatenVar Then
        MsgBox "Bu kayıt zaten eklenmiş!", vbExclamation
        Exit Sub
    End If

    Set yeniListeOgesi = ListView2.ListItems.Add()
    yeniListeOgesi.Text = ListView1.ListItems(seciliDizin).Text

    For i = 1 To ListView1.ListItems(seciliDizin).SubItems.Count
        yeniListeOgesi.SubItems(i) = ListView1.ListItems(seciliDizin).SubItems(i)
    Next i
End Sub


Private Sub ListView1_DblClick()
    Dim yeniListeOgesi As ListItem
    Dim seciliDizin As Long
    Dim existingItem As ListItem
    Dim isAlreadyAdded As Boolean

    seciliDizin = ListView1.SelectedItem.Index
  
    Dim kontrolDeger As String
    kontrolDeger = ListView1.ListItems(seciliDizin).SubItems(11)
  
    isAlreadyAdded = False
    For Each existingItem In ListView2.ListItems
     
        If existingItem.SubItems(11) = kontrolDeger Then
            isAlreadyAdded = True
            Exit For
        End If
    Next existingItem
  
    If Not isAlreadyAdded Then
        Set yeniListeOgesi = ListView2.ListItems.Add()

        yeniListeOgesi.Text = ListView1.ListItems(seciliDizin).Text
        Dim i As Long
        For i = 1 To ListView1.ListItems(seciliDizin).SubItems.Count
            yeniListeOgesi.SubItems(i) = ListView1.ListItems(seciliDizin).SubItems(i)
        Next i
    Else      
        MsgBox "Bu öğe zaten ListView2'ye eklenmiş durumda.", vbExclamation, "Tekrar Eden Giriş"
    End If
End Sub
SubItems(11) 0'dan değil 1'den başlar. SubItems(11) aslında 12. sütundur.
ListItem.SubItems.Count >= 11 kontrolü, listenin gerçekten 11 alt öğesi olup olmadığını garanti eder.

Bu kodla, aynı 11. sütun değerine sahip kayıt ikinci kez eklenmeyecektir.
 
Son düzenleme:

walabi

Altın Üye
Katılım
22 Eylül 2012
Mesajlar
1,057
Excel Vers. ve Dili
excel 2010

excel 2013
Altın Üyelik Bitiş Tarihi
06-08-2025
Kod:
Private Sub ListView1_DblClick()
    Dim yeniListeOgesi As ListItem
    Dim seciliDizin As Long
    Dim kontrolDegeri As String
    Dim i As Long
    Dim zatenVar As Boolean
    zatenVar = False
 
    seciliDizin = ListView1.SelectedItem.Index
   
    kontrolDegeri = ListView1.ListItems(seciliDizin).SubItems(11)
   
    Dim item As ListItem
    For Each item In ListView2.ListItems
        If item.SubItems.Count >= 11 Then
            If item.SubItems(11) = kontrolDegeri Then
                zatenVar = True
                Exit For
            End If
        End If
    Next item
   
    If zatenVar Then
        MsgBox "Bu kayıt zaten eklenmiş!", vbExclamation
        Exit Sub
    End If
 
    Set yeniListeOgesi = ListView2.ListItems.Add()
    yeniListeOgesi.Text = ListView1.ListItems(seciliDizin).Text

    For i = 1 To ListView1.ListItems(seciliDizin).SubItems.Count
        yeniListeOgesi.SubItems(i) = ListView1.ListItems(seciliDizin).SubItems(i)
    Next i
End Sub
Çok teşekkürler, ellerinize sağlık.
 

walabi

Altın Üye
Katılım
22 Eylül 2012
Mesajlar
1,057
Excel Vers. ve Dili
excel 2010

excel 2013
Altın Üyelik Bitiş Tarihi
06-08-2025
Aşağıdaki satırda Argument Not Optional şeklinde hata veriyor

If item.SubItems.Count >= 11 Then
 

muhasebeciyiz

Altın Üye
Katılım
10 Şubat 2006
Mesajlar
871
Excel Vers. ve Dili
Office 2016
64 Bit
Altın Üyelik Bitiş Tarihi
21-12-2027
Kod:
Private Sub ListView1_DblClick()
    Dim yeniListeOgesi As ListItem
    Dim seciliDizin As Long
    Dim kontrolDegeri As String
    Dim i As Long
    Dim zatenVar As Boolean
    zatenVar = False
 
    seciliDizin = ListView1.SelectedItem.Index
    
    kontrolDegeri = ListView1.ListItems(seciliDizin).SubItems(11)
  
    Dim item As ListItem
    For Each item In ListView2.ListItems
    
        ' Buradaki kontrol doğru: 11. alt öğeye erişmeden önce yeterli alt öğe var mı bak
        If item.SubItems.Count >= 11 Then
            
            If item.SubItems(11) = kontrolDegeri Then
                zatenVar = True
                Exit For
            End If
        End If
    Next item
  
    If zatenVar Then
        MsgBox "Bu kayıt zaten eklenmiş!", vbExclamation
        Exit Sub
    End If
 
    Set yeniListeOgesi = ListView2.ListItems.Add()
    yeniListeOgesi.Text = ListView1.ListItems(seciliDizin).Text

    For i = 1 To ListView1.ListItems(seciliDizin).SubItems.Count
        yeniListeOgesi.SubItems(i) = ListView1.ListItems(seciliDizin).SubItems(i)
    Next i
End Sub
Option Explicit Kullanın: Modülünüzün en başına Option Explicit yazın. Bu, tanımlanmamış değişken kullanımını engeller ve kodunuzu daha sağlam hale getirir.

Hem ListView1'de hem de ListView2'de, 11. sütunun her zaman dolu olduğundan emin olun. Eğer bazı satırlarda 11. sütun boş veya yoksa, bu tür hatalar alabilirsiniz.

Özellikle ListView2'ye veri eklerken tüm SubItems'ların doğru bir şekilde aktarıldığından emin olun.

Kodunuzdaki If item.SubItems.Count >= 11 Then satırı kendi başına "Argument Not Optional" hatası vermemelidir. Bu hata genellikle bir fonksiyona veya metoda beklenen bir argümanı sağlamadığınızda ortaya çıkar.
 

walabi

Altın Üye
Katılım
22 Eylül 2012
Mesajlar
1,057
Excel Vers. ve Dili
excel 2010

excel 2013
Altın Üyelik Bitiş Tarihi
06-08-2025
Teşekkürler. kontrol edeceğim.
 
Üst