• DİKKAT

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

userform adını sayfadan alması

Katılım
6 Temmuz 2008
Mesajlar
1,875
Excel Vers. ve Dili
OFFİCE 2010- TÜRKÇE
Hayırlı geceler,
Userform içerisindeki textboxları ya da farklı nesneleri controls(deger) şeklşnde tanımlayabşlşyorum

Aynı durumu userform için de yapabilirmiyim?

classmodule içerisine kodlar tanımladım bu kodların 4 farklı userform için de kullanabilmek istiyorum.


Kod:
Private Sub cmdbtn_Click()
With [COLOR="DarkRed"][I][B]userform.....[/B][/I][/COLOR]
.Controls(.deger.Value).Value = .Controls(.deger.Value).Value & cmdbtn.Caption
.Controls(.deger.Value).SetFocus
End With
End Sub
 
Merhaba.
Bu tür konularda çok fazla deneyimim yok ama aklıma gelen öneriyi belirtmek istedim.

UserForm'un Initialize olayına yazılacak aşağıdaki gibi bir satırın istediğinizi yapması lazım.
(Class Modül ile ilgili hiçbir fikrim yok)
Kod:
Private Sub UserForm_Initialize()
    UserForm1.Caption = Sheets("S.No").[A1].Value
End Sub
 
Merhaba.
Bu tür konularda çok fazla deneyimim yok ama aklıma gelen öneriyi belirtmek istedim.

UserForm'un Initialize olayına yazılacak aşağıdaki gibi bir satırın istediğinizi yapması lazım.
(Class Modül ile ilgili hiçbir fikrim yok)
Kod:
Private Sub UserForm_Initialize()
    UserForm1.Caption = Sheets("S.No").[A1].Value
End Sub

Ömer bey Konu başlığına göre cevabınız normal. Sanırım ben iyi açıklayamadım.
Çünkü bu kodlarla form sadece başlığını sayfadan alıyor.

Benim ulaşmak istediğim bilgi tam olarak şöyle;

Birden fazla form olduğunu varsayalım ve bunların herseyi aynı fakat haliyle isimleri farklı olsun. (userform1 , userform2,userform3)
Öyle bir modül yazmalıyım ki hangi form açılırsa açılsın kodlar o form üzerinde değişiklik yapmama izinversin.

mesela kodlar:
Kod:
sub deneme()
[B][COLOR="Red"]userform(x)[/COLOR][/B].textbox2.value="deneme"
end sub

Bu şekilde olacak
userformların da intialize olayına;

Kod:
Private Sub UserForm_Initialize()
    [COLOR="Red"]x[/COLOR]= Sheets("S.No").[A1].Value
End Sub

Yani böylelikle userformlar kaç tane olursa olsun aynı kod ile hepsine müdahele edebilieyim.
 
Kod:
Public myFrm As UserForm '<- This is in the Declarations section of a module

Sub usfrm()
If UserForms.Count <> 0 Then 'At least one form is loaded
Set myFrm = UserForms(0)
End If
End Sub

Bu şekilde bir kod buldum fakat belli bir yerde hatalar verdi o sebepten form ismi sabit bir yerden alması gerekiyor.
 
Sayın acar6783
ClassModül konusunda bilgim yok ama biraz araştırdım, çözüm bulamadım. İşinize yararsa ulaştığım sonuçlar aşağıda
1. Bulduğunuz Link Access için örnek veriyor
2. 5 Nolu mesajınızdaki UserForms(0) gibi kodun çalışması için
a) Formların ShowModul özelliklerinin False olması gerekiyor.
b) UserForms("UserForm1") gibi form ismine referansı kabul etmiyor.
c) Formların açık olması gerekiyor.
d) Formların açılış sırasına göre 0 dan başlayan ve değişen index no ları veriyor. UserForms(0) gibi
 
Ekteki dosyayı inceleyin.

Sn. Dakgalikur
Dosya için teşekkür ederim. Geliştirip kullanacağım.
Yine de koşula bağlı tanımlamalar yapmak zorundayız.
Sn.alicimri dediği gibi;
b) UserForms("UserForm1") gibi form ismine referansı kabul etmiyor.

O şekilde olmaycaksa eğer;
Her formun intialize olayına set tanımı yapmak daha isabet olacak diye düşünüyorum.
 
Userformları açmadan kontrol edemessiniz. ancak şu şekilde sadece açılımı kontrol etmek mümkün

A1 hücresine userformun adını yazın ve aşağıdaki kodu çalıştırın.

Kod:
Sub sayfaac()
UserFormbul = Cells(1, 1).Value 'Application.CommandBars.ActionControl.Caption
Dim TempForm As Object
Set TempForm = ThisWorkbook.VBProject.VBComponents(UserFormbul).CodeModule
VBA.UserForms.Add(TempForm.Name).Show 0

End Sub
 
Yada böyle kontrol edeceksiniz.
Kırmızı yeri elle yazacaksınız kırmızı yeri excelin bir hücresinden aldırırsanız kod çalışmayacaktır.

Kod:
Public form As UserForm

Sub Anasayfa()
Set form = [COLOR="Red"]UserForm1[/COLOR]
Dim Kontrol As Control
For Each Kontrol In form.Controls
MsgBox TypeName(Kontrol)
MsgBox Kontrol.Name
Next
End Sub
 
Yada böyle kontrol edeceksiniz.
Kırmızı yeri elle yazacaksınız kırmızı yeri excelin bir hücresinden aldırırsanız kod çalışmayacaktır.

Kod:
Public form As UserForm

Sub Anasayfa()
Set form = [COLOR="Red"]UserForm1[/COLOR]
Dim Kontrol As Control
For Each Kontrol In form.Controls
MsgBox TypeName(Kontrol)
MsgBox Kontrol.Name
Next
End Sub


Yani bu ;
Her form actığımda "Set form =(acıkolanform) " olarak tanımlama yaparsam.
Sabit bir modulu tüm formlar için kullanabilirim demek mi oluyor?
 
Denemesini yaptım.
Kod:
Public form As UserForm
Sub Anasayfa()
form.TextBox1 = "111"
End Sub
Kod:
Private Sub UserForm_Click()
Set form = UserForm1
Anasayfa
End Sub

Sorun görünmüyor.
Teşekkürler hayırlı geceler.
Daha önceleri de benzer kodlar kullanmayı denedim fakat sanırım "Public form As UserForm" burada hata yaptım :)
 
Basit dosyada sıkıntı olmamıştıfakat.
classmodule içeren kodlara ilişkin hata veryor.
Yineformun intialise olayına set form =userform1 yaptım fakat olmadı.:(
Kod:
Public WithEvents cmdbtn   As MSForms.CommandButton
Public form As UserForm

Private Sub cmdbtn_Click()

With form
.Controls(.deger.Value).Value = .Controls(.deger.Value).Value & cmdbtn.Caption
.Controls(.deger.Value).SetFocus

End With
End Sub
 
Geri
Üst