userform nesnelerini modülden adlandırmak

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)
 
S

Skorpiyon

Misafir
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.
 
Katılım
2 Mart 2005
Mesajlar
2,960
Excel Vers. ve Dili
ev: Ofis 2007- Win Xp
iş: Ofis 2010- Win Vista
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
 
S

Skorpiyon

Misafir
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.
 
Katılım
2 Mart 2005
Mesajlar
2,960
Excel Vers. ve Dili
ev: Ofis 2007- Win Xp
iş: Ofis 2010- Win Vista
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
 
Katılım
8 Ocak 2008
Mesajlar
3
Excel Vers. ve Dili
office excel XP
kodlar karşık kafayıver mek laızm
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,058
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
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
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
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:
Katılım
2 Mart 2005
Mesajlar
2,960
Excel Vers. ve Dili
ev: Ofis 2007- Win Xp
iş: Ofis 2010- Win Vista
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
 
Katılım
2 Mart 2005
Mesajlar
2,960
Excel Vers. ve Dili
ev: Ofis 2007- Win Xp
iş: Ofis 2010- Win Vista
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.
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
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 ...
 
Katılım
2 Mart 2005
Mesajlar
2,960
Excel Vers. ve Dili
ev: Ofis 2007- Win Xp
iş: Ofis 2010- Win Vista
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
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
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.
 
Katılım
2 Mart 2005
Mesajlar
2,960
Excel Vers. ve Dili
ev: Ofis 2007- Win Xp
iş: Ofis 2010- Win Vista
ç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....
 
Katılım
2 Mart 2005
Mesajlar
2,960
Excel Vers. ve Dili
ev: Ofis 2007- Win Xp
iş: Ofis 2010- Win Vista
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
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,058
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
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.
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
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.


.
 
Katılım
2 Mart 2005
Mesajlar
2,960
Excel Vers. ve Dili
ev: Ofis 2007- Win Xp
iş: Ofis 2010- Win Vista
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.
 
Üst