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
Kod:
Deger = EXCAVATION
Kod:
Deger = "EXCAVATION"
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"
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
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
Kod:
For Each fld In Rs.Fields
say = say + 1
sd = sd & ";2000"
Next fld
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