• DİKKAT

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

Listview'de format dönüştürme

Katılım
5 Ocak 2009
Mesajlar
1,586
Excel Vers. ve Dili
2003 Türkçe
Selam,

Arkadaşlar örnek dosyam ektedir. Listview'e sayıları formatlarını değiştirerek aktarıyorum. (örn:5000 ise 5.000 Saatlik gibi)
Ancak, daha sonra listview'den veri çekmem gerekiyor.Listview'de örneğin "5.000 Saatlik" görünen veriyi 5000 olarak almam gerekiyor. Bunu yapamadım.
Yardımcı olabilirseniz sevinirim.

İyi çalışmalar.
 

Ekli dosyalar

Selamlar,

Aşağıdaki kodu kullanabilirsiniz.

Kod:
MsgBox Replace(Replace(Replace(Me.ListView1.ListItems(sat).ListSubItems(1), " Yıllık", ""), " Saatlik", ""), ".", "")
 
Selamlar,

Aşağıdaki kodu kullanabilirsiniz.

Kod:
MsgBox Replace(Replace(Replace(Me.ListView1.ListItems(sat).ListSubItems(1), " Yıllık", ""), " Saatlik", ""), ".", "")

Selam,
Hocam çok teşekkür ederim. Tam istediğim gibi Ancak,
Yıllık, Saatlik gibi çok fazla format var. Replace'lerin sayısını arttırmak yerine farklı yöntemler var mıdır?

Mesela excel sayfası hücresindeki bir sayıyı NumberFormat ile formatlasak bile bunu sayı olarak görebiliyor. Mesela;
A1 hücresinde 50 sayısını özel biçimle 50 saatlik yazdım diyelim. B1 hücresine =A1 dediğimde sonuç 50 olarak görülebiliyor.

örnek dosyamdaki
Kod:
.ListItems(sat).SubItems(1) = Format(s1.Cells(i, "B"), "# Yıllık")
kısmında biraz oynama yapılabilir mi? bir yerde ListSubItems.Text gibi şeyler görmüştüm.

Ben tam anlatamadım ama eminim Siz anlamıştırsınız.

İyi çalışmalar.
 
Selamlar,

Sorularınızı sorarken ikinci açıklamanızda belirttiğiniz detaylar baştan belirtirseniz daha işlevsel çözümler önerebiliriz. Nesnelere yüklediğiniz veriler excel hücrelerindeki gibi tepki vermiyor maalesef.

Bu sebeple genellikle veriler formatlanarak ilgili nesnelere yükleniyor. Bu nesnelerin en büyük handikapıda sayısal verilerdir. Genellikle sorun yaratırlar. O yüzden bu tarz nesneleri kullanarak çalışacak olan kişiler daha sonra nesne üzerindeki verileri kullanarak hesaplama yapacaklarını göz önünde bulundurarak kod tasarlarlarsa sorun yaşamazlar.

Önerdiğim kodu aşağıdaki şekilde değiştirip denermisiniz. Bu şekilde daha genele hitap eden bir kod oldu. Kod biçimlendirmede kullanmış olduğunuz "boşluk" karakterine göre çalışmaktadır. Nesne üzerindeki tüm verileriniz sayısal ise sorun yaşamadan kullanabilirsiniz. Eğer metinsel verilerde varsa kodu revize etmek gerekecektir.

Kod:
Private Sub ListView1_DblClick()
    Dim sat As Long
    
    sat = Me.ListView1.SelectedItem.Index
    
    If InStr(1, Me.ListView1.ListItems(sat).ListSubItems(1), " ") > 0 Then
        MsgBox Format(Left(Me.ListView1.ListItems(sat).ListSubItems(1), WorksheetFunction.Search(" ", Me.ListView1.ListItems(sat).ListSubItems(1), 1) - 1), "0")
    Else
        MsgBox Format(Me.ListView1.ListItems(sat).ListSubItems(1), "0")
    End If
End Sub
 
aradığınızı bu olabilirmi.?

Sayın Halit3 Hocam,

Örnek dosyam için dediğiniz çözüm olabilir. Ancak,
Listview'e veriler çok farklı kodlar ile doluyor. Sıralı for next döngüsü ile dolmuyor. Bu yüzden ya listview'e verileri nasıl ki sayfa hücrelerine NumberFormat ile veri alıyoruz bunun gibi almak lazım. Ya da Sayın Korhan Bey'in çözümü gibi msgbox'a alırken çevirmek lazım.

Soruyu şöyle de genişletebiliriz;
Mesela A1 hücresine 50 yazdık. Sonra İsteğe bağlı biçimlendirme ile 50 TL yaptık.

MsgBox Range("A1") 50 diye okunur.
MsgBox Range("A1").Text 50 TL diye okunur.

Listview'de bunun gibi özellikler yok mudur?

İyi çalışmalar.
 
Selamlar,

Bu arada Sn. Halit beyde olaya farklı açıdan yaklaşmış. O yöntemide kullanabilirsiniz. Yani nesne üzerinde biçimlenmiş veri yerine sayfadaki kaynağı kullanabilirsiniz. Tabiki bir kritere göre verileri süzerek verileri alıyorsanız bu verilerin satır kaynağını belirten bir değeride gizli olarak nesneye yüklemeniz faydalı olacaktır. Çünkü süzülmiş verilerin sıra numaraları sayfadakilerden farklı olacaktır. Bu şekilde uygulayarak çift tıklama ile değeri çağırdığınızda hatalı sonuç almazsınız.
 
O zaman şöyle yapmak lazım
kodu aşağıdaki gibi yapınız.
MsgBox SAYILARIBUL(Me.ListView1.ListItems(sat).ListSubItems(1))

birde bu forksiyonu ekleyiniz.

Function SAYILARIBUL(hucre)
' HÜCRENİN İÇİNDEKİ SAYI DEĞERLERİNİ VERİYOR
Dim i As Integer
For i = 1 To Len(hucre)
sayi = Mid(hucre, i, 1)
If IsNumeric(sayi) = True Then
SAYILARIBUL = SAYILARIBUL & sayi
End If
Next i
End Function
 
buda olabilirmi

Private Sub ListView1_DblClick()
'Dim sat As Long
sat = Me.ListView1.SelectedItem.Index
yer = SAYILARIBUL(Me.ListView1.ListItems(sat).ListSubItems(1))
If Len(yer) > 0 Then
MsgBox SAYILARIBUL(Me.ListView1.ListItems(sat).ListSubItems(1))
Else
MsgBox RAKAMLARIBUL(Me.ListView1.ListItems(sat).ListSubItems(1))
End If
End Sub
Function SAYILARIBUL(hucre)
' HÜCRENİN İÇİNDEKİ SAYI DEĞERLERİNİ VERİYOR
Dim i As Integer
For i = 1 To Len(hucre)
sayi = Mid(hucre, i, 1)
If IsNumeric(sayi) = True Then
SAYILARIBUL = SAYILARIBUL & sayi
End If
Next i
End Function
Function RAKAMLARIBUL(hucre)
' HÜCRENİN İÇİNDEKİ HARF DEĞERLERİNİ VERİYOR
Dim i As Integer
For i = 1 To Len(hucre)
sayi = Mid(hucre, i, 1)
If IsNumeric(sayi) <> True Then
RAKAMLARIBUL = RAKAMLARIBUL & sayi
End If
Next i
End Function
 
Selamlar,

Kod:
Private Sub ListView1_DblClick()
    Dim sat As Long
    
    sat = Me.ListView1.SelectedItem.Index
    
    If InStr(1, Me.ListView1.ListItems(sat).ListSubItems(1), " ") > 0 Then
        MsgBox Format(Left(Me.ListView1.ListItems(sat).ListSubItems(1), WorksheetFunction.Search(" ", Me.ListView1.ListItems(sat).ListSubItems(1), 1) - 1), "0")
    Else
        MsgBox Format(Me.ListView1.ListItems(sat).ListSubItems(1), "0")
    End If
End Sub

Korhan Ayhan Hocam çok teşekkür ederim. Süper oldu.
Biraz
Kod:
InStr(1, Me.ListView1.ListItems(sat).ListSubItems(1), " ")
InStr komutundan
Kod:
Format(Me.ListView1.ListItems(sat).ListSubItems(1), "0")
'daki "0" 'dan bahseder misiniz?
 
Son düzenleme:
Sayın Halit3 Hocam,
Sizin çözüm de süper oldu.

SAYILARIBUL(hucre) ile RAKAMLARIBUL(hucre) fonksiyonlarındaki farkı tam anlayamadım. Örnek dosya için Sadece SAYILARIBUL(hucre) kullansam da sorun olmuyor. Arasındaki fark nedir?

bir de Function yerine neden Public Function kullanmadık. İzah edebilir misiniz?

İyi çalışmalar.
 
Selamlar,

INSTR komutu bir nevi BUL komutunun işlevini görmektedir.

Söz dizimi aşağıdaki şekildedir.

Kod:
InStr(Başlangıç Değeri, Aranan_Hücre, Aranan_Veri)

Aşağıdaki linkten detaylı bilgi alabilirsiniz.

http://office.microsoft.com/tr-tr/access-help/HA001228857.aspx


Aşağıdaki ifadedeki "0" sayısal biçimlendirme için kullanılmıştır. Yani "1.000" değer bu şekilde "1000" olarak görüntülenir.

Kod:
Format(Me.ListView1.ListItems(sat).ListSubItems(1), [COLOR=red]"0"[/COLOR])
 
Selamlar,

INSTR komutu bir nevi BUL komutunun işlevini görmektedir.

Söz dizimi aşağıdaki şekildedir.

Kod:
InStr(Başlangıç Değeri, Aranan_Hücre, Aranan_Veri)

Aşağıdaki linkten detaylı bilgi alabilirsiniz.

http://office.microsoft.com/tr-tr/access-help/HA001228857.aspx


Aşağıdaki ifadedeki "0" sayısal biçimlendirme için kullanılmıştır. Yani "1.000" değer bu şekilde "1000" olarak görüntülenir.

Kod:
Format(Me.ListView1.ListItems(sat).ListSubItems(1), [COLOR=red]"0"[/COLOR])

Selam,
Açıklamalarınız ve yardımlarınız için çok teşekkür ederim.
Ayrıca verdiğiniz Microsoft linkinde kodların türkçe açıklamaları olması beni sevindirdi.

İyi çalışmalar.
 
Geri
Üst