calendar, optionbutton, multi page yardım...

Katılım
17 Haziran 2006
Mesajlar
218
Excel Vers. ve Dili
excel 2000 Türkçe
&
excel 2003 Türkçe
textbox_change, calendar(bitti), optionbutton(bitti), multi page(bitti) yardım...

ekteki dosyada bulunan userform ile ilgili bir kaç sorum olacak.

1. multipagein başlangıçta gizli olmasını sağ tarafta bulunan option butonlardan biri seçilince ilgili olan sayfanın görünmesini nasıl sağlayabiliriz.

2. calendar dan seçilen tarih pazartesi günü ise C2 hücresine, salı günü ise I2 hücersine, çarşamba ise O2, perşembe ise U2, cuma ise AA2 ve cumartesi ise AG2 hücresine dd,mm,yyyy / dddd formatında nasıl yazdırabilirim. ( format şeklini halledebiliyorum ama hücre seçimlerini başaramadım)

3. userform üstünde ONESHOT 2 yazan framedeki textboxlardan en sağda bulunan 5 tanesinin button kullanmadan aynı frame deki 2. veya 3. textboxta hesaplanmasını nasıl sağlayabilirim.

4. kaydet düğmesiyle "option button ve calendar" değerleri kullanarak sheete nasıl yazdırabilirim..


Çok şey istediğimin farkındayım ama 16-17 saattir uğraşıyorum. nerdeyse bakmadığım programlama sitesi,excel sitesi kalmadı ama işime yarar bi örnek rastgelmedi. başka bir userformda checkboxlar ile daha ileri gittim ama option button ile yapmak işime daha çok yarıyacak. yardımlarınız için şimdiden teşekkürler.....
 
Son düzenleme:
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
Merhabalar

1.Sorunuz için; aşağdaki kodları projenize ekleyin.

Kod:
Private Sub UserForm_Initialize()
MultiPage1.Visible = False
End Sub

Private Sub OptionButton1_Click()
MultiPage1.Visible = True
Me.MultiPage1.Value = 0
End Sub
 
Private Sub OptionButton2_Click()
MultiPage1.Visible = True
Me.MultiPage1.Value = 1
End Sub
 
Private Sub OptionButton3_Click()
MultiPage1.Visible = True
Me.MultiPage1.Value = 2
End Sub
2.Sorunuz için, aşağıdaki kodları projenize ilave edin.

Kod:
Private Sub Calendar1_Click()
Dim x As Date
x = Calendar1.Value
Select Case Weekday(x, vbMonday)
   Case 1: Range("C2") = x
   Case 2: Range("I2") = x
   Case 3: Range("O2") = x
   Case 4: Range("U2") = x
   Case 5: Range("AA2") = x
   Case 6: Range("AG2") = x
End Select
End Sub
3. Sorunuz için, Textbox'ların Change olayını kullanabilirsiniz. Butona basmadan hesaplamaları yaptırabilirsiniz. Ama, numerik işlemlerden önce hata kontrollerini iyi dizayn etmelisiniz.

4. Sorunuz için, aşağıdaki şekilde bir mantık yürütülebilir.

Kod:
Dim opt As Control
For Each opt In Me.Controls
    If TypeName(opt) = "OptionButton" Then
       If opt.Value = True Then
          Range("a1") = opt.Text
       End If
    End If
Next
Range("B1").Value = Calendar1.Value
Takıldığınız bir yer olursa, yine yardımcı oluruz.
 
Katılım
17 Haziran 2006
Mesajlar
218
Excel Vers. ve Dili
excel 2000 Türkçe
&
excel 2003 Türkçe
yardımınız için teşekkür ederim Sayın fpc. (bu arada dejavu yaşadım :p sayfayı yenilediğimde daha önce görmüş olduğumu hissettim) biraz daha yardımınızı istiyorum. multipage lerde benim istediğim sadece optionbutton la seçilen sayfanın gözükmesi şeklinde idi ama onu frame ler ile hallettim. yinede merak ediyorum sadece seçilen sayfanın gözükmesi sağlanabilir mi ?

ikinci olarak textboxların change olayını beceremedim.
Kod:
TextBox5.Value = 250 * GR250.Value + 500 * GR500 + 650 * GR650 + 1000 * GR1000 + 2000 * GR2000
şeklinde bir şey yapmak istiyorum.
 
Son düzenleme:
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
Dejavu ilginç birşey hakikaten ...

Sorularınıza gelince;

Tabi bunlar sizin proje yapınıza uygun çözümlerdir (Muhtemelen daha kısa yollarda geliştirilebilir)

Multipage'leri optionbutton'larla yönetmek için (ilgilenmediğiniz sayfaları gizlemek için); option butonların kodlarını aşağıdaki gibi revize edebilirsiniz.

Kod:
Private Sub OptionButton1_Click()
MultiPage1.Visible = True
For i = 0 To MultiPage1.Pages.Count - 1
    MultiPage1.Pages(i).Visible = True
Next i
For i = 0 To MultiPage1.Pages.Count - 1
    If i = 0 Then
       Me.MultiPage1.Value = i
    Else
       MultiPage1.Pages(i).Visible = False
    End If
Next i
End Sub
 
Private Sub OptionButton2_Click()
MultiPage1.Visible = True
For i = 0 To MultiPage1.Pages.Count - 1
    MultiPage1.Pages(i).Visible = True
Next i
For i = 0 To MultiPage1.Pages.Count - 1
    If i = 1 Then
       Me.MultiPage1.Value = i
    Else
       MultiPage1.Pages(i).Visible = False
    End If
Next i
End Sub
 
Private Sub OptionButton3_Click()
MultiPage1.Visible = True
For i = 0 To MultiPage1.Pages.Count - 1
    MultiPage1.Pages(i).Visible = True
Next i
For i = 0 To MultiPage1.Pages.Count - 1
    If i = 2 Then
       Me.MultiPage1.Value = i
    Else
       MultiPage1.Pages(i).Visible = False
    End If
Next i
End Sub
Textbox'ın Change olayı için de aşağıdaki kod işinizi görebilir. Hesaplama prosedüründeki Select Case yapısı ile, hangi sayfadaki textbox'ı hesaplatacağınıza siz karar verebilirsiniz. Ben örnek olarak, 1.sayfadaki textbox5'i hesaplattım sadece .... Diğerleri için de aynı mantık geçerli ..

Kod:
Private Sub GR250_Change()
Call Hesaplama
End Sub

Private Sub GR500_Change()
Call Hesaplama
End Sub

Private Sub GR650_Change()
Call Hesaplama
End Sub

Private Sub GR1000_Change()
Call Hesaplama
End Sub

Private Sub GR2000_Change()
Call Hesaplama
End Sub

Sub Hesaplama()
Dim gr As Control
Dim x
Select Case UserForm2.MultiPage1.Value
   Case 0:
        For Each gr In UserForm2.Frame2.Controls
            If Left(gr.Name, 2) = "GR" Then
               If IsEmpty(gr) Then
                  x = 0
               Else
                  If IsNumeric(gr) Then: x = x + gr.Value * 1
               End If
            End If
        Next
        UserForm2.TextBox5.Value = x
   Case 1:
   Case 2:
End Select
End Sub
 
Katılım
17 Haziran 2006
Mesajlar
218
Excel Vers. ve Dili
excel 2000 Türkçe
&
excel 2003 Türkçe
textbox change olayını yine beceremedim.

textbox5,gr250,gr500,gr650,gr1000,gr2000 adlarında textboxlarım var. bunalrın hepsi frame1 içinde.

textbox5 e 250* gr250 değeri + 500 * gr500 değeri + 650 * gr650 değeri + 1000* gr1000 değeri + 2000*gr2000 değeri yazdırmak istiyorum.
 
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
Aşağıdaki kodları, Userform1'in kod sayfasına kopyalayınız ve çalıştırınız.

Karışık görüdüğüne bakmayın. Aslında sizin yaptığınız gibi, toplama ve çarpma işlemi yapıyor ama öncesinde bazı kontroller yapılması gerektiği için biraz daha kod barındırıyor. Textbox5=gr250*250+gr500*500 ... gibi bir mantık izliyor yani.

Ama siz örneğin, gr500'e yanlışlıkla numerik olmayan bir değer girerseniz ve biz bunları kontrol etmeden matematiksel işlemlere tabi tutarsak kodlar hemen hata uyarısı verir ve durur. Aynı şey boş textboxların bulunması halinde de geçerlidir.

Kod:
Sub Hesaplama()
Dim gr As Control
Dim x
For Each gr In UserForm1.Controls
    If Left(gr.Name, 2) = "gr" Then
       If IsEmpty(gr) Then
          x = 0
       Else
          If IsNumeric(gr) Then: x = x + gr.Value * 1 * Right(gr.Name, Len(gr.Name) - 2)
       End If
    End If
Next
UserForm1.TextBox5.Value = x
End Sub

Private Sub gr1000_Change()
Call Hesaplama
End Sub
 
Private Sub gr2000_Change()
Call Hesaplama
End Sub
 
Private Sub gr250_Change()
Call Hesaplama
End Sub
 
Private Sub gr500_Change()
Call Hesaplama
End Sub
 
Private Sub gr650_Change()
Call Hesaplama
End Sub
 
Katılım
17 Haziran 2006
Mesajlar
218
Excel Vers. ve Dili
excel 2000 Türkçe
&
excel 2003 Türkçe
teşekkür ederim sayın fpc. ufak bir sorum daha olacak peki textbox ın adı
"gr250v1" gibi olsa o zaman kodda nasıl bir değişiklik yapılması gerekecek ?
 
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
"v1"; bütün "gr" ile başlayan textboxların sonunda standart mı olacak ?
 
Katılım
17 Haziran 2006
Mesajlar
218
Excel Vers. ve Dili
excel 2000 Türkçe
&
excel 2003 Türkçe
evet v1 hepsinde standart olacak. mid ile yapmaya çalışıyorum ama bakalım becerebilecekmiyim :D
 
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
O zaman, kodlarda şu şekilde bir değişiklik yapalım.

Şu an kodlarınızda olan aşağıdaki satırı;

Kod:
If IsNumeric(gr) Then: x = x + gr.Value * 1 * Right(gr.Name, Len(gr.Name) - 2)
şu şekilde değiştiriniz.

Kod:
If IsNumeric(gr) Then: x = x + gr.Value * 1 * Mid(Right(gr.Name, Len(gr.Name) - 2), 1, Len(Right(gr.Name, Len(gr.Name) - 2)) - 2)
 
Katılım
17 Haziran 2006
Mesajlar
218
Excel Vers. ve Dili
excel 2000 Türkçe
&
excel 2003 Türkçe
sayın fpc kodda bir sorun var sanırım. gr250v1 gr500v1 ve gr650v1 e değer yazınca textboxta5 te göremiyorum ancak gr1000v1 ve/veya gr2000v1 e değer yazınca veya değiştirince sonucu gösteriyor.
 
Katılım
17 Haziran 2006
Mesajlar
218
Excel Vers. ve Dili
excel 2000 Türkçe
&
excel 2003 Türkçe
teşekkür ederim. aynı kodlar yazılı olmasına rağmen bende belirttiğim sorun ortaya çıktı. sizin yolladığınız dosyadaysa düzgün çalıştı. ilginç...

tekrar teşekkür ederim.
 
Üst