Msg Box Da Döngü İle Farklı Kriterlerde Sonuçları Döndürmek.

28/05/2022, 09:50

Oğuz Türkyılmaz

Merhaba
Dosyada aşağıda belirttiğim kod ile MuayeneBitiş tarihi o gün olan araçları Resimdeki gibi listeliyorum. MsgBox da 1024 karakter gösterilebiliyor. Bu sınırda benim için yeterli.
Çözmem gereken sorunlar:
1 - Listede o günün tarihinden itibaren +6 günlük sonuçları Plaka ya göre Her plaka numarası listede aynı tarihte sadece bir kere yer alacak şekilde msgbox da yazdırmak.
2- Dönen sonuçların msgboxda düzenli görünebilmesi için tarih plaka ve araç tipi alanlarının aralarına belli tab aralıkları verebilmek.

Yardımlarınız için teşekkür ederim.

Kod:
Sub MuayeneTarihiHatirlat()

    tarih = Format(Now, "dd.mm")

For i = 1 To Sheets("Policeler").Range("A1048576").End(3).row

    If tarih = Format(Cells(i, 23), "dd.mm") Then
        mesaj = "Dikkat Bu Hafta Muayene Yapılması Gereken Araçlar : " & vbCr
        msj = msj & "Son Gün  :  " & Cells(i, 23) & "   Plaka  :  " & Cells(i, 5) & "    Araç Tipi  :  " & Cells(i, 6) & vbCr

    End If

Next i

    MsgBox mesaj & vbCr & msj

End Sub


28/05/2022, 22:47

atoykan

Msgbox tab spacing düzenlemesi yapabileceğiniz bir cetvel (klavuz) çizgisine sahip değildir. vbTab ile tab spacing ekleyebilirsiniz ancak metinlerinizin uzunlukları farklı olduğundan ve klavuz çizgisi kontrolü olmadığından istediğiniz gibi düzenli görüntüleme elde edemezsiniz.

Bunun yerine aşağıdaki örnek koddaki gibi sütun ve bu sütunların genişliklerinin tanımlaması ile mesajınızın gerekli bölümlerini bu sütunlara işleyebilir,
Sub MsgBoxSpacing()
Dim msgValue As String
    Const Clwdt1 As Long = 35
    Const Clwdt2 As Long = 35
    Const Clwdt3 As Long = 35
   
    msgValue = AppendSpace("Son Gün", Clwdt1) & vbTab & AppendSpace("Plaka", Clwdt2) & _
        vbTab & AppendSpace("Araç Tipi", Clwdt3)
    msgValue = msgValue & vbNewLine & AppendSpace("01.01.1990", Clwdt1) & vbTab & _
        AppendSpace("34 ABC 34", Clwdt2) & vbTab & AppendSpace("Dorse", Clwdt3)
    msgValue = msgValue & vbNewLine & AppendSpace("02.01.1990", Clwdt1) & vbTab & _
        AppendSpace("35 XYZ 35", Clwdt2) & vbTab & AppendSpace("Dorse", Clwdt3)
   
    MsgBox msgValue, vbOKOnly
   
End Sub

Bu fonksiyon ile bu sütunlar arası düzenli boşlukları yerleştirebilirsiniz.
Private Function AppendSpace(textValue As String, textLength As Long) As String

Dim tmp_str As String
    If Len(textValue) > textLength Then
        tmpstr = Left(textValue, textLength)
    Else
        tmpstr = textValue & Space(textLength - Len(textValue))
    End If
   
    Debug.Print Len(tmpstr)

    AppendSpace = tmpstr
   
    tmpstr = vbNullString
End Function


Bu kodu kendi çalışmanıza uyarlayabilirsiniz ne yazık ki zaman sıkıntısı nedeni ile ben üzerinde çalışamıyorum şu an.
28/05/2022, 23:15

Oğuz Türkyılmaz

Sn@atoykan Hocam biçimlendirme için bu kadar uğraşmanın gerekli olduğunu düşünmemiştim. Ben Python Programında msg box print fonksiyonlarını çok rahat biçimlendirebiliyorum. Vba da bu kadar uğraştıracağını bilmiyordum. Yine de ben üstünde çalışırım kod istediğim bugünü ve gelecek 6 günün sonuçlarını tarih sırasına göre küçükten büyüğe döndürsün yeter. VAkit ayırdığınız için teşekkür ederim.
29/05/2022, 10:02

atoykan

İstediğiniz türde bir sorgu sonucu döndürmek için ADODB.Connection kullanıp
Kod:
Connection.Open "Provider=Microsoft.ACE.OLEDB.xx.x;Data Source= " & ThisWorkbook.FullName & ";Extended Properties=""Excel xx.x Macro;HDR=YES;"";"
kodu ile mevcut Excel çalışmanızı kaynak olarak kullanarak istediğiniz kriterlerde bir sorgu ile recordset oluşturup kullanabilirsiniz.
29/05/2022, 12:28

Oğuz Türkyılmaz

(29/05/2022, 10:02)atoykan yazdı: İstediğiniz türde bir sorgu sonucu döndürmek için ADODB.Connection kullanıp
Kod:
Connection.Open "Provider=Microsoft.ACE.OLEDB.xx.x;Data Source= " & ThisWorkbook.FullName & ";Extended Properties=""Excel xx.x Macro;HDR=YES;"";"
kodu ile mevcut Excel çalışmanızı kaynak olarak kullanarak istediğiniz kriterlerde bir sorgu ile recordset oluşturup kullanabilirsiniz.

sn@atoykan hocam oluşturmamı istediğiniz sorguyu okurken bana fenalık geldi . Ben kim onu oluşturmak kim. On fırın ekmek yemem bir de 10 sene lazım.