• DİKKAT

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

if or then veya if and then döngüsü kullanımı

Katılım
4 Temmuz 2011
Mesajlar
17
Excel Vers. ve Dili
Excel 2003 ve 2007
Arkadaşlar yaptığım proğramda şöyle bir manksal döngü kurmam gerekiyor bu konuda yardımlarınızı rica ediyorum.
Textbox1 Ünvan Bilgisi içeriyor Textbox2 gün sayısı içeriyor Textbox3 Tazminat puanı bilgisi içeriyor.Şöyle bir Mantık kullanacağız.
Eğer textbox1 in içeriği Mühendis ise Textbox2 nin içeriğini 3 ile çarp Textbox3 ün içine yaz veya Textbox1 in içeriği Tekniker ise Textbox2 nin içeriğini 2 ile çarp textbox3 ün i içine yaz veya Textbox1 in içeriği Teknisyen ise Textbox2 nin içeriğini 1,2 ile çarp textbox3 ün içeriğine yaz. diyeceğiz VBA da bunu nasıl kodlama yapacağız
 
if değil select case kullanın.
 
Rica etsem. Benim yazdığım mantıksal ifadeye göre bir örnek yazabilirmisiniz
 
Kod:
Select Case Textbox1.Value
            Case Is = "Mühendis"
            Textbox3.value = Textbox2.value * 3
            Case Is = "Tekniker"
            Textbox3.value = Textbox2.value * 2
            Case Is = "Teknisyen"
            Textbox3.value = Textbox2.value * 1.2       
End select
 
Kod:
    Select Case TextBox1.Text
        Case "Mühendis": katsayi = 3
        Case "Tekniker": katsayi = 2
        Case "Teknisyen": katsayi = 1.2
    End Select
    TextBox3.Text = TextBox2.Text * katsayi
 
Kod:
txt = Textbox1.Text
katsayi = Switch(txt = "Mühendis", 3, txt = "Tekniker", 2, txt = "Teknisyen", 1.2)
TextBox3.Text = TextBox2.Text * katsayi
 
Kod:
    txt = "Mühendis"
    If txt = "Mühendis" Then
        katsayi = 3
    ElseIf txt = "Tekniker" Then
        katsayi = 2
    ElseIf txt = "Teknisyen" Then
        katsayi = 1.2
        Else
        katsayi = 0
    End If
    MsgBox katsayi
 
Kod:
 txt = "Mühendis"
    katsayi = IIf(txt = "Mühendis", 3, IIf(txt = "Tekniker", 2, IIf(txt = "Teknisyen", 1.2, 0)))
    MsgBox katsayi
 
Sanıyorum 3 ayda bir ödenen ek özel hizmet tazminatı yani arazi tazminatı için kullanacaksınız. isteğinize göre aşağıdaki gibi bir kod yapısı işinizi görecektir. Ancak yerinizde olsam bu iş için textbox kullanmazdım. Çünkü textboxa her zaman tam doğru bir şekilde veri yazılamayabilir:

PHP:
Private Sub TextBox1_Change()
If IsNumeric(TextBox2) Then
    If TextBox1 = "Mühendis" Then
        TextBox3 = WorksheetFunction.Min(60, TextBox2 * 3)
    ElseIf TextBox1 = "Tekniker" Then
        TextBox3 = WorksheetFunction.Min(40, TextBox2 * 2)
    ElseIf TextBox1 = "Teknisyen" Then
        TextBox3 = WorksheetFunction.Min(24, TextBox2 * 1.2)
    Else
        TextBox3 = ""
    End If
Else
    TextBox3 = ""
End If
End Sub

Private Sub TextBox2_Change()
If IsNumeric(TextBox2) Then
    If TextBox1 = "Mühendis" Then
        TextBox3 = WorksheetFunction.Min(60, TextBox2 * 3)
    ElseIf TextBox1 = "Tekniker" Then
        TextBox3 = WorksheetFunction.Min(40, TextBox2 * 2)
    ElseIf TextBox1 = "Teknisyen" Then
        TextBox3 = WorksheetFunction.Min(24, TextBox2 * 1.2)
    Else
        TextBox3 = ""
    End If
Else
    TextBox3 = ""
End If
End Sub

Not: Arazi tazminatında Mühendis için 60, Tekniker için 40 ve Teknisyen için 24 puan üst sınır olduğundan kodda buna göre düzeltme yaptım.
 
Sanıyorum 3 ayda bir ödenen ek özel hizmet tazminatı yani arazi tazminatı için kullanacaksınız. isteğinize göre aşağıdaki gibi bir kod yapısı işinizi görecektir. Ancak yerinizde olsam bu iş için textbox kullanmazdım. Çünkü textboxa her zaman tam doğru bir şekilde veri yazılamayabilir:

PHP:
Private Sub TextBox1_Change()
If IsNumeric(TextBox2) Then
    If TextBox1 = "Mühendis" Then
        TextBox3 = WorksheetFunction.Min(60, TextBox2 * 3)
    ElseIf TextBox1 = "Tekniker" Then
        TextBox3 = WorksheetFunction.Min(40, TextBox2 * 2)
    ElseIf TextBox1 = "Teknisyen" Then
        TextBox3 = WorksheetFunction.Min(24, TextBox2 * 1.2)
    Else
        TextBox3 = ""
    End If
Else
    TextBox3 = ""
End If
End Sub

Private Sub TextBox2_Change()
If IsNumeric(TextBox2) Then
    If TextBox1 = "Mühendis" Then
        TextBox3 = WorksheetFunction.Min(60, TextBox2 * 3)
    ElseIf TextBox1 = "Tekniker" Then
        TextBox3 = WorksheetFunction.Min(40, TextBox2 * 2)
    ElseIf TextBox1 = "Teknisyen" Then
        TextBox3 = WorksheetFunction.Min(24, TextBox2 * 1.2)
    Else
        TextBox3 = ""
    End If
Else
    TextBox3 = ""
End If
End Sub

Not: Arazi tazminatında Mühendis için 60, Tekniker için 40 ve Teknisyen için 24 puan üst sınır olduğundan kodda buna göre düzeltme yaptım.
Sanıyorum 3 ayda bir ödenen ek özel hizmet tazminatı yani arazi tazminatı için kullanacaksınız. isteğinize göre aşağıdaki gibi bir kod yapısı işinizi görecektir. Ancak yerinizde olsam bu iş için textbox kullanmazdım. Çünkü textboxa her zaman tam doğru bir şekilde veri yazılamayabilir:

PHP:
Private Sub TextBox1_Change()
If IsNumeric(TextBox2) Then
    If TextBox1 = "Mühendis" Then
        TextBox3 = WorksheetFunction.Min(60, TextBox2 * 3)
    ElseIf TextBox1 = "Tekniker" Then
        TextBox3 = WorksheetFunction.Min(40, TextBox2 * 2)
    ElseIf TextBox1 = "Teknisyen" Then
        TextBox3 = WorksheetFunction.Min(24, TextBox2 * 1.2)
    Else
        TextBox3 = ""
    End If
Else
    TextBox3 = ""
End If
End Sub

Private Sub TextBox2_Change()
If IsNumeric(TextBox2) Then
    If TextBox1 = "Mühendis" Then
        TextBox3 = WorksheetFunction.Min(60, TextBox2 * 3)
    ElseIf TextBox1 = "Tekniker" Then
        TextBox3 = WorksheetFunction.Min(40, TextBox2 * 2)
    ElseIf TextBox1 = "Teknisyen" Then
        TextBox3 = WorksheetFunction.Min(24, TextBox2 * 1.2)
    Else
        TextBox3 = ""
    End If
Else
    TextBox3 = ""
End If
End Sub

Not: Arazi tazminatında Mühendis için 60, Tekniker için 40 ve Teknisyen için 24 puan üst sınır olduğundan kodda buna göre düzeltme yaptım.
Arkadaşım teşekkür ederim. Ancak ben ünvan kısmını textbox1 yazmışım Combobox olacaktı. birde textbox1 içine yazdığımız değeri textbox tan çıkınca textbox3 ün içine otomatik olarak nasıl yazdıracağız.
 
Arkadaşım teşekkür ederim. Ancak ben ünvan kısmını textbox1 yazmışım Combobox olacaktı. birde textbox1 içine yazdığımız değeri textbox tan çıkınca textbox3 ün içine otomatik olarak nasıl yazdıracağız.
Textbox1 yerine Combobox1 (ya da adı neyse) yazabilirsiniz.

Textbox3'te textbox2 yani gün sayısı ile günlük oranın çarpımı yazılmıyor muydu? Textbox1'de ne var?

Örnek dosya paylaşırsanız iyi olur.
 
Textbox1 yerine Combobox1 (ya da adı neyse) yazabilirsiniz.

Textbox3'te textbox2 yani gün sayısı ile günlük oranın çarpımı yazılmıyor muydu? Textbox1'de ne var?

Örnek dosya paylaşırsanız iyi olur.
Çok Teşekkür ederim Textbox2 ye girilen rakamın hesaplama sonucu textbox3 e hemen yazıyor.
 
Arkadaşım teşekkür ederim. Ancak ben ünvan kısmını textbox1 yazmışım Combobox olacaktı. birde textbox1 içine yazdığımız değeri textbox tan çıkınca textbox3 ün içine otomatik olarak nasıl yazdıracağız.
Çok Teşekkür ederim Textbox2 ye girilen rakamın hesaplama sonucu textbox3 e hemen yazıyor.

Kodun ilk halinde zaten ikinci alıntıdaki işlemi yapıyoruz ama siz ilk alıntıda farklı bir istekte bulunmuştunuz. Bir karışıklık mı var yoksa ben mi yanlış anlıyorum?
 
Yok anlaşılmada bir sıkıntı yok. Ben zaten sizin yazdığınız kodu kullandım. Gayet güzel çalışıyor. Şimdi farklı şeyleri araştırıyorum. Ben uzun yıllar Delphi kullandım. On da baya iyiydim ama 10 yılı aşkın yazılımdan uzak kalınca köreldik. Şimd, Excel ve VBA ile iş yerinde lazım olan işler için program yapmaya çalışıyorum.
 
Sizi tebrik ederim, kendini geliştirmeye çalışmak ve bunun için çaba göstermek takdire şayan. Memur meslektaşlarımın ve özellikle de sizin gibi (tahminen) aynı bakanlık mensubu arkadaşlarımın bu gayretlerinden mutluluk duyuyorum.

Ben mesajımda ne yapmak istediğinizi anlamadığımı belirtmek istemiştim. Eğer textbox1'in textbox3'e aktarılması yeni bir konuysa muhtemelen textbox1'in Exit olayına yazılacak kodla çözülebilir:

PHP:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    TextBox3.Text = TextBox1.Text
End Sub

Gibi.
 
Teşekkür ederim. Tahmininizde yanılmadınız Memur um ve Mutemetlik yapıyorum. Bu arada bir soru sorabilirmiyim. UserForm un çalıştığı her bilgisayarda tam ekran çalışması için properties penceresinde bir ayar bulamadım. Bilginiz varmı
 
Bu konuda çeşitli çalışmalar var ve bu forumda da sanıyorum @Haluk üstadımızın bir çalışması var ama genel olarak çok verimli olmadığı, her ekran kartına ve her monitöre uydurmanın nesneler üzerinde olumsuz etkileri olduğu söyleniyor.

Şu konuyu bi inceleyin isterseniz:

 
Geri
Üst