Userform İçindeki Text Box ların Güncellenmesi

petsiye

Altın Üye
Katılım
28 Eylül 2009
Mesajlar
137
Excel Vers. ve Dili
Office 2019 TR 32 Bit
Altın Üyelik Bitiş Tarihi
10-05-2029
Merhaba,

Bu harika forum sitesi sayesinde aşağıdaki kodlarını paylaştığım Userform'u oluşturdum. User Formu ( UserForm100 ), Makro yardımıyla aşağıdaki kod ile açtığımda Tüm TextBox'lar hesaplanarak içerisine sorunsuz şekilde sonuç yazıyor. ( Uzun uzun kodu yazmadım ama Textbox sayısı kadar uzayıp giden bir kod var ve Userform açıldığında sorunsuz çalışıyor )

Private Sub UserForm_Initialize()

Application.Calculation = xlCalculationAutomatic

TextBox15 = ThisWorkbook.Worksheets("ÖRNEK 1").Range("E8").Value & " Hisse "
TextBox16 = ThisWorkbook.Worksheets("ÖRNEK 1").Range("E6").Value & " Hisse "
TextBox3 = ThisWorkbook.Worksheets("ÖRNEK 1").Range("E7").Value & " Hisse "
TextBox17 = ThisWorkbook.Worksheets("ÖRNEK 1").Range("E8").Value & " Hisse "
TextBox18 = ThisWorkbook.Worksheets("ÖRNEK 1").Range("E8").Value & " Hisse "
TextBox28 = ThisWorkbook.Worksheets("ÖRNEK 1").Range("E9").Value & " Hisse "
TextBox19 = ThisWorkbook.Worksheets("ÖRNEK 1").Range("E10").Value & " Hisse "

If TextBox15.Text = " Hisse " Then
TextBox15 = ""
End If
If TextBox16.Text = " Hisse " Then
TextBox16 = ""
End If
If TextBox3.Text = " Hisse " Then
TextBox3 = ""
End If
If TextBox17.Text = " Hisse " Then
TextBox17 = ""
End If
If TextBox18.Text = " Hisse " Then
TextBox18 = ""
End If
If TextBox28.Text = " Hisse " Then
TextBox28 = ""
End If
If TextBox19.Text = " Hisse " Then
TextBox19 = ""



Sorum şu;

Görseldeki Userfomda ( Yine Userform100 ), Sarı renkli düğmelere her tıkladığımda da, tıpkı Userform açılışında olduğu gibi, TextBoxlara, güncel sayıları yazdırabilmek mümkün mü ? Her butonun içerisine yukarıdaki formülü kopyala yapıştır ile bunu yapmak belki mümkün olabilir, fakat bunun gibi onlarca Userform oluşturacağım düşünüldüğünde, bu iş benim için oldukça zahmetli olacak. O yüzden bunun kestirme bir yolu varmı bunu öğrenmek istiyorum.

Saygılarımla

253792
 

cems

Altın Üye
Katılım
2 Eylül 2005
Mesajlar
2,459
Excel Vers. ve Dili
office 2010 tr 32bit
Altın Üyelik Bitiş Tarihi
13-06-2029
Gunaydın :)
Sorunun cozumu ya bir update tuşu kullanmak ya da da daha kendi kendine olsun derseniz zamana baglı bir tetik kullanmak olabilir. Dosyanız eklemeye uygun degil gorunuyor, bu durumda denemenizi onereceğim yapay zeka kodları sunlar olabilir.

Bir tuş ile gereken zamanda tetiklemek isterseniz ;


  • Private Sub GüncelleTextBoxlar()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("ÖRNEK 1")

    TextBox15 = ws.Range("E8").Value & " Hisse "
    TextBox16 = ws.Range("E6").Value & " Hisse "
    TextBox3 = ws.Range("E7").Value & " Hisse "
    TextBox17 = ws.Range("E8").Value & " Hisse "
    TextBox18 = ws.Range("E8").Value & " Hisse "
    TextBox28 = ws.Range("E9").Value & " Hisse "
    TextBox19 = ws.Range("E10").Value & " Hisse "

    If TextBox15.Text = " Hisse " Then TextBox15 = ""
    If TextBox16.Text = " Hisse " Then TextBox16 = ""
    If TextBox3.Text = " Hisse " Then TextBox3 = ""
    If TextBox17.Text = " Hisse " Then TextBox17 = ""
    If TextBox18.Text = " Hisse " Then TextBox18 = ""
    If TextBox28.Text = " Hisse " Then TextBox28 = ""
    If TextBox19.Text = " Hisse " Then TextBox19 = ""
    End Sub

  • Buton Tıklama Olayına Prosedürü Çağırın:
    Her buton için GüncelleTextBoxlar prosedürünü çağırın.


    Private Sub btnButon1_Click()
    GüncelleTextBoxlar
    End Sub

    Private Sub btnButon2_Click()
    GüncelleTextBoxlar
    End Sub
 

cems

Altın Üye
Katılım
2 Eylül 2005
Mesajlar
2,459
Excel Vers. ve Dili
office 2010 tr 32bit
Altın Üyelik Bitiş Tarihi
13-06-2029
Bir zamanlayıcı ile gereken zamanda tetiklemek isterseniz ;


Dim WithEvents Timer As clsTimer

Private Sub UserForm_Initialize()
Set Timer = New clsTimer
Timer.StartTimer 300 ' 5 dakika (300 saniye)
GüncelleTextBoxlar ' Başlangıçta güncelle
End Sub

Private Sub UserForm_Terminate()
Timer.StopTimer
End Sub

Private Sub GüncelleTextBoxlar()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("ÖRNEK 1")

TextBox15 = ws.Range("E8").Value & " Hisse "
TextBox16 = ws.Range("E6").Value & " Hisse "
TextBox3 = ws.Range("E7").Value & " Hisse "
TextBox17 = ws.Range("E8").Value & " Hisse "
TextBox18 = ws.Range("E8").Value & " Hisse "
TextBox28 = ws.Range("E9").Value & " Hisse "
TextBox19 = ws.Range("E10").Value & " Hisse "

If TextBox15.Text = " Hisse " Then TextBox15 = ""
If TextBox16.Text = " Hisse " Then TextBox16 = ""
If TextBox3.Text = " Hisse " Then TextBox3 = ""
If TextBox17.Text = " Hisse " Then TextBox17 = ""
If TextBox18.Text = " Hisse " Then TextBox18 = ""
If TextBox28.Text = " Hisse " Then TextBox28 = ""
If TextBox19.Text = " Hisse " Then TextBox19 = ""
End Sub

Private Sub Timer_Tick()
GüncelleTextBoxlar
End Sub

2. Zamanlayıcı Sınıfı Oluşturma
Excel'de bir sınıf modülü oluşturmalısınız. Bunun için:

  1. Visual Basic for Applications penceresini açın (ALT + F11).
  2. Insert menüsünden Class Module seçin.
  3. Yeni sınıf modülünü clsTimer olarak adlandırın.
  4. Aşağıdaki kodu bu sınıf modülüne yapıştırın:

Public Event Tick()

Private mTimer As Object

Public Sub StartTimer(ByVal Interval As Double)
Set mTimer = CreateObject("WScript.Shell")
Application.OnTime Now + TimeValue("00:05:00"), "clsTimer_Tick"
End Sub

Public Sub StopTimer()
On Error Resume Next
Application.OnTime Now + TimeValue("00:05:00"), "clsTimer_Tick", , False
End Sub

Private Sub clsTimer_Tick()
RaiseEvent Tick
StartTimer 300 ' 5 dakika
End Sub

Açıklamalar
  • UserForm_Initialize: UserForm açıldığında zamanlayıcı başlar ve TextBox'lar güncellenir.
  • GüncelleTextBoxlar: TextBox'ları güncelleyen prosedür.
  • Timer_Tick: Zamanlayıcı her 5 dakikada bir GüncelleTextBoxlar prosedürünü çağırır.
  • clsTimer: Zamanlayıcıyı yönetir.
Bu yapı ile UserForm açıldığında TextBox'lar 5 dakikada bir otomatik olarak güncellenecektir
 

cems

Altın Üye
Katılım
2 Eylül 2005
Mesajlar
2,459
Excel Vers. ve Dili
office 2010 tr 32bit
Altın Üyelik Bitiş Tarihi
13-06-2029
Her ikisini de denemeye calısınız, dosya olmadığından hata yonetimi yapılamaz , verirse yazarsınız ya da takılmayı anlıyorsanız kendiniz onarırsınz ...

Ek fikir olarak ; onceki verileri bir database sayfasına yenilendikten sonra atar sonra da siler ve yenilerseniz, database sayfasına baglı bir dinamik grafik sayesinde hedeflediğiniz hisselerin artma dusme egilimini de gorselleştirmeniz mumkun olabilirdi.

Ayrıca , onlarca sayfa arasıda ugrasmak yerine userform ustune gruplanmış hisseler ile derleyerek cok sayfalı multipage . Kodlama daha karışık gorunse de başardığınızda diğerlerine cogaltıp son sayfada dinamik grafik hazırlamanız sanırım işinizin takibini daha kolaylaştırabilir.

Dosya agır gibi , bu durumda işlemci ya cok guclu olmalı ya da tetikleme sık olmamalı yoksa donmalar yasanabilr
 
Son düzenleme:

petsiye

Altın Üye
Katılım
28 Eylül 2009
Mesajlar
137
Excel Vers. ve Dili
Office 2019 TR 32 Bit
Altın Üyelik Bitiş Tarihi
10-05-2029
Her ikisini de denemeye calısınız, dosya olmadığından hata yonetimi yapılamaz , verirse yazarsınız ya da takılmayı anlıyorsanız kendiniz onarırsınz ...

Ek fikir olarak ; onceki verileri bir database sayfasına yenilendikten sonra atar sonra da siler ve yenilerseniz, database sayfasına baglı bir dinamik grafik sayesinde hedeflediğiniz hisselerin artma dusme egilimini de gorselleştirmeniz mumkun olabilirdi.

Ayrıca , onlarca sayfa arasıda ugrasmak yerine userform ustune gruplanmış hisseler ile derleyerek cok sayfalı multipage yerleştirebilirsiniz. Kodlama daha karışık gorunse de başardığınızda diğerlerine cogaltıp son sayfada dinamik grafik hazırlamanız sanırım işinizin takibini daha kolaylaştırabilir.
Merhaba,

Uzun ve açıklayıcı cevabınız için çok teşekkür ederim. Fakat kullanıcılar bunu manuel tetikleme ile görmek istiyorlar. Sebebi, her tetikleme de Userform bir miktar kullanıcıyı bekletiyor, Çünkü , dosya boyutu ve yapısı gereği biraz şişkin bir dosya. O yüzden sadece düğme tetiklemesi ile çalışan bir kısayol arıyorum. İlk mesajınız üzerinde yoğunlaşarak ilerlemeye çalışacağım.

Saygılarımla
 

cems

Altın Üye
Katılım
2 Eylül 2005
Mesajlar
2,459
Excel Vers. ve Dili
office 2010 tr 32bit
Altın Üyelik Bitiş Tarihi
13-06-2029
Kolay gelsin ,siz bunun icinden cıkarsınız buraya kadar yaptıysanız ...
 

petsiye

Altın Üye
Katılım
28 Eylül 2009
Mesajlar
137
Excel Vers. ve Dili
Office 2019 TR 32 Bit
Altın Üyelik Bitiş Tarihi
10-05-2029
Gunaydın :)
Sorunun cozumu ya bir update tuşu kullanmak ya da da daha kendi kendine olsun derseniz zamana baglı bir tetik kullanmak olabilir. Dosyanız eklemeye uygun degil gorunuyor, bu durumda denemenizi onereceğim yapay zeka kodları sunlar olabilir.

Bir tuş ile gereken zamanda tetiklemek isterseniz ;


  • Private Sub GüncelleTextBoxlar()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("ÖRNEK 1")

    TextBox15 = ws.Range("E8").Value & " Hisse "
    TextBox16 = ws.Range("E6").Value & " Hisse "
    TextBox3 = ws.Range("E7").Value & " Hisse "
    TextBox17 = ws.Range("E8").Value & " Hisse "
    TextBox18 = ws.Range("E8").Value & " Hisse "
    TextBox28 = ws.Range("E9").Value & " Hisse "
    TextBox19 = ws.Range("E10").Value & " Hisse "

    If TextBox15.Text = " Hisse " Then TextBox15 = ""
    If TextBox16.Text = " Hisse " Then TextBox16 = ""
    If TextBox3.Text = " Hisse " Then TextBox3 = ""
    If TextBox17.Text = " Hisse " Then TextBox17 = ""
    If TextBox18.Text = " Hisse " Then TextBox18 = ""
    If TextBox28.Text = " Hisse " Then TextBox28 = ""
    If TextBox19.Text = " Hisse " Then TextBox19 = ""
    End Sub

  • Buton Tıklama Olayına Prosedürü Çağırın:
    Her buton için GüncelleTextBoxlar prosedürünü çağırın.


    Private Sub btnButon1_Click()
    GüncelleTextBoxlar
    End Sub

    Private Sub btnButon2_Click()
    GüncelleTextBoxlar
    End Sub
Bu arada üstteki uzun kodu Makro olarak mı, yoksa Userformun kendisinemi yazmalıyım?
 

cems

Altın Üye
Katılım
2 Eylül 2005
Mesajlar
2,459
Excel Vers. ve Dili
office 2010 tr 32bit
Altın Üyelik Bitiş Tarihi
13-06-2029
userformun kendisine makro olarak yazmanız gerek zira veri kodları da userformda oldugundan alınıyordur . Uyum olur mu catısır mı yorum yapmam dogru olmaz, deneyerek gormek gerek
 
Üst