• Foruma hoş geldin 👋 Ziyaretçi

    Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Çözüldü Vba kodu yanyana yazma

Bu sorun verilen destek sayesinde çözüme ulaştırılmıştır.
Durum
Konu Çözümlendiği İçin Kapatılmıştır.

tukayf

Yeni Üye
Kullanıcı Bilgileri
Katılım
19 Eyl 2022
Mesajlar
418
Çözümler
9
Aldığı beğeni
97
Excel Versiyonu
Office 2019 TR
Konuyu Başlatan
RS("TC_No") = TC_No
RS("Ad") = Ad
RS("Tel_No") = Tel_No
RS("kan") = Kan
RS("boy") = boy
RS("kilo") = kilo
RS("ten") = Ten
RS("goz") = goz
RS("sac") = sac

Bu şekilde 100 e yakın alan var. Bunları alt alta yazınca iş çığrından çıkıyor yan yana yazabilmenin yolu nedir acaba.
Ya da bunları kısaltabilecek bir yol var mıdır? Yardımlar için teşekkürler.
 
Eğer accessteki sütun isimleri ile formdaki kontrol isimlerini birebir aynı isimle yaparsanız şu şekilde çok hızlı ve kod kalabalığı olmadan çalışır.
Önce dosyanızın yedeğini alın. RS.Open kodundan sonra şunları yazın .

Dim kontrol As Control
dim txtbx as string
For Each txtbx In basliklar(RS)
Set kontrol = Me.Controls(txtbx)
kontrol.Text = IIf(IsNull(RS(txtbx)), "", RS(txtbx))
Next txtbx


Bunun çalışması için sütun başlıklarını listeleyen şu kodu formda boş bir yere ekleyin.
Private Function basliklar(ByVal MyRs As ADODB.Recordset) As String()
Dim Matrice() As String
Dim Flds As ADODB.Fields
Dim i As Integer
Set Flds = MyRs.Fields
ReDim Matrice(Flds.Count - 1)
For i = 0 To Flds.Count - 1
Matrice(i) = CStr(Flds(i).Name)
Next i
basliklar = Matrice
End Function
Dönüş yapacağım hocam.
 
Dosyayı güncelledim. Tekrar indiriniz. Başliklar makrosunu ihtiyaca göre güncellersiniz.
Hocam butondan sonra temizle kodu sanırım aktif olmuyor. Detaylı inceleyemedim. Bende mi sorun var. Sizde çalışıyor mu acaba.
 
Hocam butondan sonra temizle kodu sanırım aktif olmuyor. Detaylı inceleyemedim. Bende mi sorun var. Sizde çalışıyor mu acaba.
Dosyanız ektedir.
Basliklar makrosunda güncelleme yapıtığınızda ,
for i=0 to 109 döngülerindeki (temizle ve diğer kodlardaki) 109 rakamını da düzeltmeyi unutmayın.
 

Ekli dosyalar

  • FORM.xlsm
    90.5 KB · Gösterim: 2
Sn. oilgun acemiliğime ve yeteneksizliğime verin sizin kodları bir türlü kullanamadım.
 
aşağıdaki kodlar RS.Open satırının altına yazılabilir
Kod:
Değerli Misafirimiz İçeriği Görebilmek İçin Üyemiz İseniz Giriş Yap'ın Ya da Üye Ol'un.
yada
Kod:
Değerli Misafirimiz İçeriği Görebilmek İçin Üyemiz İseniz Giriş Yap'ın Ya da Üye Ol'un.
kodların açıklamasını yapalım o zaman:
RS.Open kodu ile recordset açıldıktan sonra
1 - For Each fld In RS.Fields: kodu ile recordsetteki'deki tüm alanlar taranır rs.fields recordsetteik alanlar demektir , for each her biri anlamına gelir fld ise size kalmış bir değişken adıdır isterseniz başka adda kullanabilirsiniz
2 - RS(fld.Name) = Controls(fld.Name): fld.Name alanın adıdır diyelim ki TC_No alanındasınız bu durumda
RS("TC_No") = Controls(TC_No ) olur yani alan adı TC_No olan alana, nesne adı (metin kutusu yada açılır kutu adı) TC_No olan metin kutusunun değeri atanır.
3 - Next fld : sonraki alana geçilir

diğer kodun mantığı da aşağı yukarı aynıdır ilkinde doğrudan alanlar içinde dolaşılırken 2. de alan sırasına göre dolaşılır
1 - for x=0 to rs.fields.count-1 : recordsette alan sıralama 0dan başlar o nedenle ilk alanın sırası 0 son alanın sırası ise alan sayısının 1 eksiğidir
2 - rs(x)=controls(rs(x).name) : x. sıradaki alan değerini aynı alan adına sahip nesneden alıyor diyelim ki 0. alanın adı ID, budurumda rs(0) değerini adı rs(x).name ile aynı yani ID olan metin kutusundan alır
Sn. halily sizin kodlarınızı
Marka = IIf(IsNull(RS("Marka")), "", RS("Marka"))
Model = IIf(IsNull(RS("model")), "", RS("model"))
Plaka = IIf(IsNull(RS("plaka")), "", RS("plaka"))

bu veri getirme kodlarına nasıl uyarlayabilirim. Kusura bakmayınız sizin yazdığınız ile Balta nın yazdıklarını aynı yerde kullandım. O kısmı çözdük admin in çözümüyle ama yukardaki kısımları nasıl kısaltabilirim.
 
Kod:
Değerli Misafirimiz İçeriği Görebilmek İçin Üyemiz İseniz Giriş Yap'ın Ya da Üye Ol'un.
yukardaki Kodu dener misiniz?
 
Çözüm
Her konuda tek soru ilkesinin mantığı budur aslında, birden fazla soruya verilen cevaplar karmaşa doğuruyor.
Sizin konunuz biraz istemeden de olsa soru çorbasına döndü.
Aslında 2 türevi olan tek koda var
Kod:
Değerli Misafirimiz İçeriği Görebilmek İçin Üyemiz İseniz Giriş Yap'ın Ya da Üye Ol'un.
ile recordsete/tabloya veri atarken
RS(fld.Name) = Controls(fld.Name)de yerlerini degistirererek - Controls(fld.Name) = RS(fld.Name) - recordset/tablodan alınan veri metin kutularına yazılır.
 
Her konuda tek soru ilkesinin mantığı budur aslında, birden fazla soruya verilen cevaplar karmaşa doğuruyor.
Sizin konunuz biraz istemeden de olsa soru çorbasına döndü.
Aslında 2 türevi olan tek koda var
Kod:
Değerli Misafirimiz İçeriği Görebilmek İçin Üyemiz İseniz Giriş Yap'ın Ya da Üye Ol'un.
ile recordsete/tabloya veri atarken
RS(fld.Name) = Controls(fld.Name)de yerlerini degistirererek - Controls(fld.Name) = RS(fld.Name) - recordset/tablodan alınan veri metin kutularına yazılır.
Hocam haklısınız ben kodları kısaltmak istedim. Ne sorduğumu bende bilmiyorum. İlk sorudaki örnekti. Ama dosya içeriğine bakan hocalar sağolsun her kod için kısaltma yazınca ortalık karıştı. Aslında karışmadı benim yetersizliğim nedeniyle karışık gibi oldu. Şu an düzenledim. Worde aktarırkenki kodlar için yeni konu açıyorum o zaman. Onlarda çok uzun :)
 
Her konuda tek soru ilkesinin mantığı budur aslında, birden fazla soruya verilen cevaplar karmaşa doğuruyor.
Sizin konunuz biraz istemeden de olsa soru çorbasına döndü.
Aslında 2 türevi olan tek koda var
Kod:
Değerli Misafirimiz İçeriği Görebilmek İçin Üyemiz İseniz Giriş Yap'ın Ya da Üye Ol'un.
ile recordsete/tabloya veri atarken
RS(fld.Name) = Controls(fld.Name)de yerlerini degistirererek - Controls(fld.Name) = RS(fld.Name) - recordset/tablodan alınan veri metin kutularına yazılır.
Birde halily ve Balta affınıza sığınarak kodlarınızı sorabilir miyim. Her ikinizin kodunu da ekledim forma.
Halil hocam sizin kodları kullanırsam alan ekleme durumlarında koda herhangi bir ilave söz konusu olmayacak sanırım.
Balta hocanın kodlarını kullandığımda ise alan ekleme durumlarında başlıklara ekleme yapmam gerekiyor mu? Doğru mu anladım.
 
Bilgisayar olmadığından Balta hocamin kodlarını inceleyemedim o nedenle birşey diyemem ama önerdiğim kodda dikkat edilmesi gereken 2 nokta var
1 - verilerin alınacağı/aktarılacağı metin kutusunun adı ilgili alanın adı ıle aynı olmalı yada alanadi + sbt bir metin mesela ID alanı için txtID yada IDtxt gibi sabit bir uzantı yada ön ek.
Tabi o durumda nesne çağırma koduna ilgili uzanti da eklenmeli txtID ise Controls("txt" & fld.Name)
2 - recordsetteki her alanın karşılığında mutlaka aynı ada sahip bir metin kutusu/açılır kutu vs gibi bir nesne olmalı
 
Son düzenleme:
Bilgisayar olmadığından Balta hocamin kodlarını inceleyemedim o nedenle birşey diyemem ama önerdiğim kodda dikkat edilmesi gereken 2 nokta var
1 - verilerin alınacağı/aktarılacağı metin kutusunun adı ilgili alanın adı ıle aynı olmalı
2 - recordsetteki her alanın karşılığında mutlaka aynı ada sahip bir metin kutusu/açılır kutu vs gibi bir nesne olmalı
Hocam text, combo ve diğer nesnelerin adı ile accesteki alan adlarının hepsini birebir aynı yapmaya çalışıyorum. Sanırım sizin kodlarda o zaman bir sorun çıkmaz ne kadar alan ekleme yaparsam yapayım.
 
Durum
Konu Çözümlendiği İçin Kapatılmıştır.

Konuyu okuyanlar

Geri
Üst