Sn. Dengesiz,
Programında kodlama da o kadar çok hatan var ki hangisini yazayım bilemiyorum.
Sana ilk ve acil tavsiyem kodların başında "Option Explicit" kullanman.
Yani değişken tanımlamayı zorunlu hale getirmen.
Default olarak yapmak istersen
Vba penceresinde Tools-Options-"Require Variable Declaration" seçeneğini işaretle.
Bunu yapmış olsaydın, mesela daha baştan, Komut48'de Select Case kısmında
kısmında hata verirdi ve sende burayı
şeklinde yazman gerektiğini anlardın.
Burada Deger adlı değişkene string bir deger atarken "" kullanmak zorundasın, kullanmadığın için bunu bir değişken olarak görüyor ve o değişkene atanmış bir değer olmadığı için Deger adlı değişken değersiz oluyor. Senin kodda değişken tanımlama zorunluluğu da olmadığı için hata da vermiyor doğal olarak.
Form_TARIH.deger adlı değişkenin bulunamaması ve boş gelmesine gelince;
Senin kodlamanda Komut48'in sonunda Form1 adlı formu açtıktan sonra TARIH adlı formu
kapatıyorsun ve hooop o tanımladığın global değişkenler de onunla beraber yokoluyor.
Kod:
...
DoCmd.OpenForm "Form1", acNormal
End Select
DoCmd.Close acForm, "TARIH"
Diyeceksin ki ben Form1 in içinde load kısmında
Sql adlı değişkeni kullanıyorum ama listbox'ta kullanamıyorum. Çünkü form1'i açarken load event'i aktif olur ve TARIH formundaki değişkenleri kullanırsın ama bu aşamadan sonra yani form1 açıldıktan sonra Komut48 kaldığı yerden çalışmaya devam eder ve TARIH formunu kapatır. Böylece daha sonra aktif olan ListBox ile ilgili click olayında o değişkenlere ulaşamazsın, çünkü onlar artık yok olmuştur, o form kapanmıştır.
TARIH formu içinde tanımladığın "deger" alanı sadece o form içinde Global, yani formun içindeki tüm sub ve function'larda kullanabilirsin. O form kapandığında bu değişkeni diğer formlarda kullanamazsın.
Tüm formlarda kullanmak istediğin değişkenleri Module kısmında tanımlamalısın. Tarih formundaki bu değişkenleri oradan kaldır, yeni bir module aç ve bu public değişkenleri orada tanımla. Tabii burada tanımladıktan sonra kodunda şunları da şöyle değiştireceksin.
Form_TARIH.SQL ->
Sql ve Form_TARIH.Deger -> Deger olacak.
Son olarak da Liste2 DoubleClick'de aşağıdaki şekilde olmalı.
Kod:
Select Case Deger
Case "EXCAVATION"
DoCmd.OpenForm "EXC", acNormal, , "ID=" & Me.Liste2
DoCmd.Close acForm, "Form1"
DoCmd.Close acForm, "TARIH"
Case "STRINGING"
DoCmd.OpenForm "STR", acNormal, , "[ID]=" & Me.Liste2
DoCmd.Close acForm, "Form1"
DoCmd.Close acForm, "TARIH"
Case Else
DoCmd.OpenForm "WLDNG", , , "[WLD]='" & Me.Liste2 & "'"
DoCmd.Close acForm, "Form1"
DoCmd.Close acForm, "TARIH"
End Select
Formlarında kapat tuşları yok, en az 5-6 kere task manager'dan msaccess 'i sonlandırmak
ve tüm formlarda control box ve close tuşunu aktif etmek zorunda kaldım.
Mesela en son "EXC" adlı formu açtıktan sonra kullanıcı o formu nasıl kapatacak bende bilmiyorum.
TARIH formunda komut düğmelerinde özel resim kullanmışsın, her seferinde hata verdi, kaldırmak zorunda kaldım.
Kodlamanda düzenli Tab, yani içiçe düzenli bir şekil yok.
Kodlarını okumak, hangi endif hangi if'e ait, next'in for'u nerede bulmak mesele.
Yani şunu demek istiyorum; kod böyle yazılmaz
Kod:
For Each fld In Rs.Fields
say = say + 1
sd = sd & ";2000"
Next fld
Böyle yazmalısın:
Kod:
For Each fld In Rs.Fields
say = say + 1
sd = sd & ";2000"
Next fld
Bu şekilde kod yazmaya devam edersen, sende hatalarını göremezsin,
hata bulmakta veya kodu takip etmekte çok zorlanırsın, sana yardımcı olmak isteyen kişilerde.
Yani neredeyse, yapılmaması gereken her şeyi yapmışsın.
Bu sayede ufak bir problemi çözebilmek için sende saatlerce uğraşmışsın,
belki bir kaç dakikada çözülecek bu problem için bende 1 saattir uğraşıyorum.
Umarım anlatabilmişimdir.
Saygılar