• DİKKAT

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

userform nesnelerini modülden adlandırmak

  • Konbuyu başlatan Konbuyu başlatan hsayar
  • Başlangıç tarihi Başlangıç tarihi
Katılım
2 Mart 2005
Mesajlar
2,960
Excel Vers. ve Dili
ev: Ofis 2007- Win Xp
iş: Ofis 2010- Win Vista
arkadaşlar plansız bir iş yaptım şimdi elle uğrşamkta zor geliyor acaba bir kere çalışacak olan şöyle bir moduül tasarlanabilirmi

Eski adı > yeni Adı
Combobox1 > cbnfkayil
Combobox2 > cbnfkayilce
Combobox3 > cbnfkaymahkoy
Combobox4 > cbikettil
Combobox5 > cbikettilce
Combobox6 > cbikettmahkoy
Textbox1 > txtTcno
Textbox2 > txtAdi
..................
vesaire şeklinde giden eski nesne adlarınaın yerine yeni nesne adlarını verecek..........
tab index değerlerini belirlemek mümkünse fena olmaz

mesala eski nesne adı, yeni nesne adı, tabindexdeğeri
Textbox1 ise txtTcno olarak adlandıracak tabindeks değeri 0 olacak
ve daha sonra tüm modüllerde bu nesneye referans almış olan kelimleri değişterecek mesala
ComboBox3_Change yerine cbnfkaymahkoy_Change şeklinde düzenleyecek
eh olursada daha sonra kendini imha edecek (ama işinizi uzatacaksa bunun üzerinde fazla durmayınız)
 
Sayın hsayar,

Bu işlemi yapmadan önce kesinlikle bir yedek alınız.

Kod bölümüne geçip Ctrl + H yapınız. Find What kısmına Eski İsimleri, Replace With bölümüne Yeni İsimleri yazınız, Direction bölümünü All yapınız. Current Procedure bölümünü seçerek Replace All deyiniz, Sonra Current Module'yi seçerek Replace All deyiniz ve en son Current Project'i seçerek Replace All deyiniz. Değiştireceğiniz her nesne için 1 kez yapmalısınız. Sonrasında işleminiz tamam.
 
sayın sertkaya sizin verdiğiniz yöntemi biliyorum.... bunu bir kerede moduülden adlandırmak istiyorum kadolar türkçedir

Kod:
Sub NesneAdlandir()
combobox1.name = cbxNfKayİl
cbxNfKayİl.tabindex = 0
combobox2.name = cbxNfKayİlce
cbxNfKayİlce.tabindex =1
Değiştir (combobox1, cbxNfKayİl, tüm prosodürlerde)
Değiştir (combobox2, cbxNfKayİlce, tüm prosodürlerde)
nesne adlandırmoduülünü sil
end sub
 
Sayın hsayar,

Bu tür bir modül yazmakla yukarıda bahsedilen yöntem aynı şey. Amacınız böyle bir modül yazılabilir mi ? tarzından ise daha önce hiç denemediğim ve bilgim olmadığı için bir şey diyemeyeceğim. Ancak amacınız nesnelerin isimlerini (belirli bir sıra takip etmeyen şekilde) değiştirmek ise en iyi ve en sağlıklı yöntem bence bu.
 
yada şöylede olabilir

sayfa1
a sütununda eski adlar,
b sütununda yeni adlar,
c sütununda yeni tab index değerleri olduğunu varsayalım

Kod:
sub Nesneadlandir2()
For i = 2 to sonsat
eskiad = Cells (i,1)
yeniad = Cells (i,2)
yenitabi = Cells (i,3)

eskiad.name = yeniad
yeniad.tabindeks = yenitabi 
değiştir (eskiad, yeniad, tüm prosodürlerde)
next i
bu_kodu_sil 'olmasada olur
End sub
cevab ve ilginiz için teşekkürler sn. sertkaya
 
Aşağıdaki gibi deneyin.

Kod:
sub Nesneadlandir2()
For i = 2 to sonsat
controls(cells(i,"a")).name= Cells (i,"b")
controls(cells(i,"a")).tabindex= Cells (i,"c")
next i
End sub
 
En iyi yöntem yukarıda sayın Sertkaya tarafından tarif edilmiş.

Nesnelerin, VBA adları projenin çalışması sırasında değiştirilemez.

Ancak, illaki VBA ile daha pratik olur diyorsanız o zaman aşağıdaki gibi bir şey deneyin.

UserForm üzerinde CommandButton1, ComboBox1 ve TextBox1 nesneleri var.

Aşağıdaki kod da, UserForm modulüne yerleştirilecek ve çalıştırılacak...

Kod:
Private Sub CommandButton1_Click()
    Dim LngStartLine As Long, LngEndLine As Long, LngStartColumn As Long, LngEndColumn As Long
    Dim LngNoLine As Long
    Dim TempLine As String
    LngStartLine = 1
    LngEndLine = 1000
    For LngNoLine = LngStartLine To LngEndLine - 1
        TempLine = Application.VBE.ActiveCodePane.CodeModule.Lines(LngNoLine, 1)
        If InStr(1, TempLine, "Private Sub CommandButton1_Click") > 0 Then
            NewLine = "Private Sub MyButton1_Click()"
            Application.VBE.ActiveCodePane.CodeModule.ReplaceLine LngNoLine, NewLine
        End If
        If InStr(1, TempLine, "Private Sub ComboBox1_Change") > 0 Then
            NewLine = "Private Sub MyCombo_Click()"
            Application.VBE.ActiveCodePane.CodeModule.ReplaceLine LngNoLine, NewLine
        End If
        If InStr(1, TempLine, "Private Sub TextBox1_Change") > 0 Then
            NewLine = "Private Sub MyTextBox_Change()"
            Application.VBE.ActiveCodePane.CodeModule.ReplaceLine LngNoLine, NewLine
        End If
    Next
End Sub
 
Son düzenleme:
yazdığım kodalr vba kodu değil isteklerimin türkçe karşılığıdır.... doğrusunu bilmiyorum.
yardımlarınız için teşekkürler
 
Aşağıdaki gibi deneyin.

Kod:
sub Nesneadlandir2()
For i = 2 to sonsat
controls(cells(i,"a")).name= Cells (i,"b")
controls(cells(i,"a")).tabindex= Cells (i,"c")
next i
End sub

hocam boş bir modüle

Kod:
Sub Nesneadlandir2()
For i = 1 To 3
UserForm1.Controls(Cells(i, "a")).Name = Cells(i, "b")
'Controls(Cells(i, "a")).TabIndex = Cells(i, "c")
Next i
End Sub
şeklinde küçük bir deneme ayptım ama tür uyuşmazlığı dedi... nasıl aşabilirim.
 
hocam boş bir modüle

şeklinde küçük bir deneme ayptım ama tür uyuşmazlığı dedi... nasıl aşabilirim.

Yukarıda 8 No'lu mesajda, aldığınız bu hatanın açıklaması var ...
 
En iyi yöntem yukarıda sayın Sertkaya tarafından tarif edilmiş.

Nesnelerin, VBA adları projenin çalışması sırasında değiştirilemez.

Ancak, illaki VBA ile daha pratik olur diyorsanız o zaman aşağıdaki gibi bir şey deneyin.

UserForm üzerinde CommandButton1, ComboBox1 ve TextBox1 nesneleri var.

Aşağıdaki kod da, UserForm modulüne yerleştirilecek ve çalıştırılacak...

Kod:
Private Sub CommandButton1_Click()
    Dim LngStartLine As Long, LngEndLine As Long, LngStartColumn As Long, LngEndColumn As Long
    Dim LngNoLine As Long
    Dim TempLine As String
    LngStartLine = 1
    LngEndLine = 1000
    For LngNoLine = LngStartLine To LngEndLine - 1
        TempLine = Application.VBE.ActiveCodePane.CodeModule.Lines(LngNoLine, 1)
        If InStr(1, TempLine, "Private Sub CommandButton1_Click") > 0 Then
            NewLine = "Private Sub MyButton1_Click()"
            Application.VBE.ActiveCodePane.CodeModule.ReplaceLine LngNoLine, NewLine
        End If
        If InStr(1, TempLine, "Private Sub ComboBox1_Change") > 0 Then
            NewLine = "Private Sub MyCombo_Click()"
            Application.VBE.ActiveCodePane.CodeModule.ReplaceLine LngNoLine, NewLine
        End If
        If InStr(1, TempLine, "Private Sub TextBox1_Change") > 0 Then
            NewLine = "Private Sub MyTextBox_Change()"
            Application.VBE.ActiveCodePane.CodeModule.ReplaceLine LngNoLine, NewLine
        End If
    Next
End Sub
sn hocam eski ismlerler yeni isimleri sayfadan aldırmak mümkünmüdür acaba
 
Sadece 1 kere çalışacak bir kod için fazlasıyla zaman harcadık bile ..... sayın Sertkaya' nın tarif ettiği şekilde yapsanız, şimdiye kadar işiniz bitmişti.
 
çok fazla kontrol var ve ben her defasında önce contrelleri koyup daha sonra nesneleri adlandırıyorum yani benim işime her zaman yarayacak....
 
Kod:
'Yazar Hamitcan <excel.web.tr>
Private Sub CommandButton1_Click()
    For i = 0 To Controls.Count - 1
        c = c + 1
        Cells(c, 1) = Controls(i).Name
    Next
End Sub
kodlar&#305; ile sayfa1 in A s&#252;tununa ald&#305;&#287;&#305;m nesne adlar&#305;n&#305;n&#305;n b s&#252;tuna yeni nesne adlar&#305;n&#305;, c s&#252;tununa da yeni tabindeks de&#287;erlerini yazacam userformda ve mod&#252;llerde t&#252;m de&#287;i&#351;iklikleri otomatik olarak yapacak ve &#231;ok g&#252;zel olacak....
tabi siz de&#287;erli ustalar&#305;m&#305;n sayesinde
 
Bende &#252;zerinde d&#252;&#351;&#252;nmeden cevap yazm&#305;&#351;&#305;m bu &#351;ekilde ancak tabindex de&#287;erlerini de&#287;i&#351;tirebilirsiniz. &#304;simlerini de&#287;i&#351;tiremezsiniz. Ba&#351;ka y&#246;ntemler bulunabilir ama Haluk &#252;stad&#305;m&#305;nda belirtti&#287;i gibi kodlar&#305;n i&#231;inde de&#287;i&#351;iklik yapmak en kolay&#305;d&#305;r.
 
Evet, nesnelerin VBA ad&#305; ger&#231;ekte runtime s&#305;ras&#305;nda de&#287;i&#351;tirilemez.

Ekli dosya, yukar&#305;da say&#305;n Sertkaya taraf&#305;ndan tarif edilen ve say&#305;n hsayar taraf&#305;ndan sayfa &#252;zerindeki eski ve yeni isimlere g&#246;re VBA ile yap&#305;lmas&#305;n&#305;na dair istek &#252;zerine haz&#305;rlanm&#305;&#351;t&#305;r.

Kodlar&#305;n &#231;al&#305;&#351;mas&#305; VBE' de ilgili de&#287;i&#351;iklikleri yapacakt&#305;r ancak, VBE properties penceresinde s&#246;zkonusu de&#287;i&#351;ikliklerin de manuel olarak yap&#305;lmas&#305; gereklidir.


.
 
proprtiesden nesnelerin name lerini bize de&#287;i&#351;terece&#287;iz buda bir ilerlemedir hocam ellerinize sa&#287;l&#305;k te&#351;ekk&#252;r ederim...
peki sadece tab indeks de&#287;erlerini d&#252;zetmeye yarayan kod eklerseniz &#231;ok &#351;ey istemi&#351; olurmuyuz.
sayg&#305;lar&#305;mla...
ayr&#305;ca name &#246;zelli&#287;inin de&#287;i&#351;tirilmesi bir g&#252;n m&#252;mk&#252;n olursa payla&#351;&#305;rsan&#305;z sevinirim.
 
Geri
Üst