Nesne özelliğini tek seferde değiştirme

Katılım
25 Ağustos 2004
Mesajlar
99
Tüm forum üyelerine merhaba,

Sorum kısaca söyle; bir userformdaki nesnelere ait bir özelliği tek komutla değiştirebilir miyiz ?

Ã?rneğin Userformumda 16 adet textbox var;

Private Sub TextBox16_Change()
TextBox16.Value = Format(TextBox16, "###.########")
End Sub

şeklindeki bir kodu 16 textbox'ı da etkileyecek şekle getirmek mümkün müdür ?

Herkese iyi bir gün diliyorum.
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,057
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Sn mlakdag

Sorunuz üzerinde düşündüm tam bir çözüm olmasada şu şekilde yapılabilir.
çok daha iyi öneriler çıkacaktır mutlaka.

textboxların bulunduğu userformun içine aşağıdaki kodu yazınız. Fakat bunu sadece userform_click olayında gerçekleştirebildim. Yani formatların değiştirilmesi için userforma bir kere tıklamak gerekiyor.

Kod:
Private Sub UserForm_Click()
For a = 1 To 16
UserForm1.Controls("TextBox" & a) = Format(UserForm1.Controls("TextBox" & a), "###.#######")
Next a
End Sub
diğer bir çözümde;eğer textboxlardan sonra örneğin bir command buton seçilecekse aynı kodlar bu butonun içine yazılabilir.

Kod:
Private Sub CommandButton1_Enter()
For a = 1 To 16
UserForm1.Controls("TextBox" & a) = Format(UserForm1.Controls("TextBox" & a), "###.#######")
Next a
End Sub
Başka önerileri açıkçası bende merakla bekliyorum.

selamlar
 
Katılım
25 Ağustos 2004
Mesajlar
99
Sayın leventm,

Ã?ncelikle cevabınız için çok teşekkür ediyorum. Bu soruyu sorarken asıl amacım bir gruplama mantığının bulunup bulunmadığını öğrenmekti. Olmadığını öğrendiğim gibi alternatif ve yaratıcı bir metoduda öğrenmiş oldum, harcadığınız zaman ve emek için tekrar teşekkürlerimi sunuyorum.
 
Katılım
25 Ağustos 2004
Mesajlar
99
herkesin affına sığınarak sormayı unuttuğum bir hususu dile getirmek istiyorum;
Acaba hangi yöntem (sizin önerdiğiniz yöntem mi, her bir textbox için ayrı ayrı düzenleme yapmak mı )excelin performansına olumsuz katkı yapacaktır ?
 
X

xxrt

Misafir
mlakdag' Alıntı:
herkesin affına sığınarak ..
Her iki yöntemde çalışmanızın permormansına,hissedilir bir olumsuz etki yapmaz.Ama her kod fazlalığı veya döngüler mutlaka bir ağırlaşma vereceğinden cevap olarak istediğiniz
mlakdag' Alıntı:
performansına olumsuz katkı
sorusuna
leventm mod'umuzun cevabını,performansal deneyerek daha sağlıklı anlıyabilirsiniz.
Her program döngü tipinin kendine has özellikleri vardır. For Next komutu daha önceden belirlenen bir sayıda ve Do-Loop komutu döngünün sonunda veya başında kontrol edilen şart sağlanana kadar tekrar eder.While Wend ise Do Loop döngüsünün basite indirgenmiş bir halidir.............
 
Katılım
7 Temmuz 2004
Mesajlar
1,141
Bu soruyu sorarken asıl amacım bir gruplama mantığının bulunup bulunmadığını öğrenmekti. Olmadığını öğrendiğim gibi alternatif ve yaratıcı bir metoduda öğrenmiş oldum,
gruplama vba da bulunmuyor.

ancak visual basic te kontrolleri indexleyebilirsiniz.

yani visual basic(veya herhangi bir nesneye yönelik programlama dili) kullanıyor olsaydınız.

combobox1(0)
combobox1(1)
combobox1(2)
.
.
.

şeklinde nesnelerinizi bir diziye atayabilirdiniz.

ve çağırmasıda

Kod:
for i = 0 to n
   combobox1(i).caption = i
next i
şeklinde olurdu.

ama excelde böyle bir şey mümkün değil. en iyi çözüm sn. leventm'in sunduğu çözüm.

alternatif olarak kontrolün tipindende gidilebilir.

mesela formunuzun üzerinde command button lar, option box lar, label lar vs. var, ve her bir kontrol tipi için ayrı işlem yapmak istiyorsunuz.

Kod:
Dim ctrl As Control
For Each ctrl In UserForm1.Controls
Select Case TypeName(ctrl)
Case "CommandButton"
    ctrl.Enabled = False
Case "OptionButton"
    ctrl.Value = True
Case "Label"
    ctrl.Caption = "etiket"
.
.
.
.
.
.
End Select
Next
 
Üst