Bir yardım programı yapmaya çalışıyorum
Herşey muntazam bitme noktasında ama şu an bir yerde bir sıkıntı gördüm çözemedim bir türlü
Şöyleki İki tane Form var Biri KayitFormu adında diğeri userform1 adında her isinde de birer tane listbox var KayitFormu'ndakinin adı Listbox1 Userform1 içindeki ise lstmydata adında
Sorunum şu:
Öncelikle genel olarak frmAnamenu diye bir form üzerinden ilk kez uerform1 açıldığında oradan lstmydata üzerinden herhangi bir satıra çift tıklama yaptığımda KayitFormu benm istediğim şekilde yeni bir kayıt oluşturmak üzere açılıyor. Ancak kayıtformu kapatılıp tekrar frmanamenu ye geçildiğinde oradan userform1 açıldığında ve oradan bir başka satır ya da aynı satır seçildiğinde ve double clik olayı çağrıldığında bu kez KayitFormu içindeki listbox1 içindeki 3. satırda yer alan (bu değişmiyor hep 3. satır geliyor) bilgiler Kayyitformunda görünüyor. Oysa KayıtFormu'nda hiç bir şekilde listbox1 de öncesinde ya da sonrasında satıl seçilmemişken
İstediğim ise double click olayı yapıldığında KAyitFormu açılsın ve yeni kayıtyapılacak şeilde bilgiler oraya düzenli gelsin ve formun kilitli olan alanları açılsın. Dediğim ibi bu programın ilk açılışında harika çalışıyor sonradan sıkıntı oluyor. Ben KayitFormu initialize kısmı ya da acvtivate kısmından şüpheleniyorum ama bir türlü çözemedim siz değerli üstatların yardımını alayım istedim. (Karışık anlattıysam kusura bakmayın)
KayitFormu initialize ve Userform1 Lstmydata double click prosedürlerini ekliyorum buraya umarım yardımcı olabilirsiniz
Kod: Tümünü seç
Private Sub UserForm_Initialize()
Dim yol As String
Dim i As Long, j As Long
Dim d As Long, sonSatir As Long, SonSatiry As Long
Dim yilAralik As Range, hucre As Range
Dim ws As Worksheet
Dim veri As Variant, tersVeri() As Variant
Dim satirSayisi As Long, sutunSayisi As Long
On Error Resume Next
ListBox1.ListIndex = -1 ' Seçimi sıfırla
On Error GoTo 0
'====LAbelBildirimiçin ön ayar
Set MesajKuyrugu = New Collection
LabelMesajGosteriliyor = False
' LabelBildirim başta gizli olsun
LabelBildirim.Visible = False
' ====LAbelBildirimiçin ön ayar sonu
' === Kilit görseli
yol = ThisWorkbook.Path & "\icons\KilitKapali.gif"
If Dir(yol) <> "" Then
Image2.Picture = LoadPicture(yol)
End If
' === Başlangıç kilit ayarı
With Me.ToggleButton4
.Value = True
.Caption = "Kilitli"
.Enabled = True
End With
' === GlobalYil ayarı
If Not isNumeric(GlobalYil) Or Len(GlobalYil) <> 4 Then
If IsDate(Sheets("AnaSayfa").Range("C2").Value) Then
GlobalYil = CStr(Year(Sheets("AnaSayfa").Range("C2").Value))
Else
MsgBox "AnaSayfa!C2 hücresinde geçerli bir tarih bulunamadı!", vbCritical
Exit Sub
End If
End If
' === ComboBox yılı doldur
cmbYilSec.Clear
On Error Resume Next
Set yilAralik = ThisWorkbook.Names("YilListesi").RefersToRange
On Error GoTo 0
If Not yilAralik Is Nothing Then
For Each hucre In yilAralik
If isNumeric(hucre.Value) Then cmbYilSec.AddItem hucre.Value
Next hucre
End If
cmbYilSec.Value = GlobalYil
' === Etiket
Label22.Caption = "Çalışılan Dönem: 01.01." & GlobalYil & " - 31.12." & GlobalYil
' === Verileri listele
If YuklenenYil <> GlobalYil Or Not VeriYuklendi Then
'Call KayitlariListele(GlobalYil)
Call ListeyiYukle
YuklenenYil = GlobalYil
VeriYuklendi = True
End If
' === ListBox verileri yükle (ters)
Set ws = ThisWorkbook.Sheets("AnaSayfa")
For d = 2 To 100000
If ws.Range("A" & d).Value = "" Then
sonSatir = d - 1
Exit For
End If
Next d
If sonSatir >= 2 Then
satirSayisi = sonSatir - 1
veri = ws.Range("A2:N" & sonSatir).Value
sutunSayisi = UBound(veri, 2)
ReDim tersVeri(1 To satirSayisi, 1 To sutunSayisi)
For i = 1 To satirSayisi
For j = 1 To sutunSayisi
If j = 3 Then
tersVeri(i, j) = Format(veri(satirSayisi - i + 1, j), "dd.mm.yyyy")
Else
tersVeri(i, j) = veri(satirSayisi - i + 1, j)
End If
Next j
Next i
With ListBox1
.Clear
.ColumnCount = sutunSayisi
.List = tersVeri
.ColumnWidths = "0;30;60;70;60;80;60;140;40;160;0;40;0;0"
End With
Else
ListBox1.Clear
End If
' === Formun yılına göre kilit kontrolü
Call YilKontroluUygula
' === Yardım listesi
'Sheets("SORGU").Range("A2:M5000").ClearContents
SonSatiry = WorksheetFunction.CountA(Sheets("SORGU").Range("A:A")) + 1
With LstYardim
.ColumnCount = 13
.RowSource = "SORGU!A2:M" & SonSatiry
.ColumnWidths = "0;30;0;0;0;0;0;0;50;160;0;0;0"
.ColumnHeads = True
End With
' === Admin kontrolü
Me.btnDepo.Visible = (LCase(GirisYapanKullanici) = "admin")
' === Başlangıç ayarları
baslangicBagisVerildi = True
OpBgsVerildi.Value = True
OpBgsYapildi.Value = False
Label14 = ListBox1.ListCount & " adet kayıt listelendi."
ToggleButton4.Value = True
ToggleButton4.Enabled = True
Call UpdateToggleButtonState
Me.cmbBagisci.Visible = False
Me.LabelBagisci.Visible = False
' Giriş yapan kullanıcı boşsa VERİ sayfasından çek
If GirisYapanKullanici = "" Then
GirisYapanKullanici = ThisWorkbook.Sheets("VERİ").Range("M19").Value
End If
' === ComboBox arama için Aile verileri
Dim wsAileler As Worksheet
Dim veriAd As Variant, veriTC As Variant
Set wsAileler = ThisWorkbook.Sheets("Aileler")
sonSatir = wsAileler.Cells(wsAileler.Rows.count, "C").End(xlUp).Row
If sonSatir >= 2 Then
veriAd = wsAileler.Range("C2:C" & sonSatir).Value
veriTC = wsAileler.Range("D2:D" & sonSatir).Value
Me.CmbAd.Clear
Me.CmbTC.Clear
For i = 1 To UBound(veriAd, 1)
Me.CmbAd.AddItem veriAd(i, 1)
Me.CmbTC.AddItem veriTC(i, 1)
Next i
Me.CmbAd.ListIndex = -1
Me.CmbTC.ListIndex = -1
End If
cmbBagisci.Clear
For idx = 2 To lastRow
bagisciAdi = Trim(wsBagiscilar.Cells(idx, "C").Value)
If bagisciAdi <> "" Then
cmbBagisci.AddItem UCase(bagisciAdi) ' TAMAMEN BÜYÜK HARF
End If
Next idx
'burası Aile kayıtformundan yardım yap ile geçildiğinde formun kilitli değil açık halde açılması için
' Eğer açılış "Duzenle" modundaysa kilidi aç
If AcilisModu = "Duzenle" Or KayitFormuKilitliOlmasin = True Then
ToggleButton4.Value = False
UpdateToggleButtonState
CmbYardimTuru.SetFocus
Else
ToggleButton4.Value = True
UpdateToggleButtonState
End If
'açılışta Yardım Türleri Comboboxa Listelensin
Dim turler() As String
Dim dict As Object
Set dict = CreateObject("Scripting.Dictionary")
Set ws = ThisWorkbook.Sheets("StokTakip")
sonSatir = ws.ListObjects("Tablo1").ListRows.count
' Türleri Dictionary ile benzersiz olarak alalım
For i = 1 To sonSatir
Dim tur As Variant
tur = Trim(ws.ListObjects("Tablo1").DataBodyRange(i, 2).Value)
If tur <> "" Then
If Not dict.Exists(tur) Then dict.Add tur, Nothing
End If
Next i
' ComboBox'a benzersiz türleri ekle
Me.CmbYardimTuru.Clear
For Each tur In dict.Keys
Me.CmbYardimTuru.AddItem tur
Next tur
DoldurVeSiralaCmbVERYAR
' Açılışta Birimler Combobox'a Listelensin
Dim birimler() As String
Dim dictBirim As Object
Set dictBirim = CreateObject("Scripting.Dictionary")
Set ws = ThisWorkbook.Sheets("StokTakip")
sonSatir = ws.ListObjects("Tablo1").ListRows.count
' Birimleri Dictionary ile benzersiz olarak alalım
For i = 1 To sonSatir
Dim birim As Variant
birim = Trim(ws.ListObjects("Tablo1").DataBodyRange(i, 6).Value) ' F sütunu
If birim <> "" Then
If Not dictBirim.Exists(birim) Then dictBirim.Add birim, Nothing
End If
Next i
' ComboBox'a benzersiz birimleri ekle
Me.CmbBirim.Clear
For Each birim In dictBirim.Keys
Me.CmbBirim.AddItem birim
Next birim
Set ws = ThisWorkbook.Sheets("Sorgu")
' Sorgu sayfasında B2 hücresinde veri var mı kontrol et
If ws.Cells(2, "B").Value <> "" Then
' Kayıt formu hazırlanıyor bildirimi
ShowTemporaryLabel "Kayıt Formu sizin için hazırlanıyor...", RGB(255, 230, 153), vbBlack
Pause 5
DoEvents
' Kayıt formu iptal işlemini başlat
Call IptalVeVeriGeriAl ' İptal işlemi ile verileri geri al
' Kayıt formu hazır bildirimi
ShowTemporaryLabel "Kayıt Formu kullanıma hazır.", RGB(153, 255, 153), vbBlack
Pause 3
DoEvents
End If
End SubBu da userfom1 içindeki lstmydata doublue click prosedürü
Kod: Tümünü seç
Private Sub lstMyData_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim satir As Long
' Seçili satır yoksa çık
If lstMyData.ListIndex = -1 Then
MsgBox "Lütfen bir satır seçiniz.", vbExclamation
Exit Sub
End If
satir = lstMyData.ListIndex
' Kayıt formunu aç
KayitFormuKilitliOlmasin = True
KayitFormu.Show
KayitFormuKilitliOlmasin = False ' Açtıktan sonra tekrar kilitlenebilir olsun
Me.Hide ' UserForm1'i gizle
' Verileri aktar
With KayitFormu
' lstMyData'dan alınan verileri KayitFormu'na aktar
.CmbAd.Value = lstMyData.List(satir, 2) ' Örnek: CmbAd'ye lstMyData'dan 2. kolonu aktar
.CmbTC.Value = lstMyData.List(satir, 3) ' CmbTC'ye lstMyData'dan 3. kolonu aktar
.TextBoxTEL.Value = lstMyData.List(satir, 4) ' TextBoxTEL'ye lstMyData'dan 4. kolonu aktar
.ComboBoxILCE.Value = lstMyData.List(satir, 5) ' ComboBoxILCE'ye lstMyData'dan 5. kolonu aktar
.TextBoxADRES.Value = lstMyData.List(satir, 6) ' TextBoxADRES'ye lstMyData'dan 6. kolonu aktar
.TextBoxACIKLAMA.Value = lstMyData.List(satir, 7) ' TextBoxACIKLAMA'ya lstMyData'dan 7. kolonu aktar
.ComboBoxDRM.Value = lstMyData.List(satir, 8) ' ComboBoxDRM'ye lstMyData'dan 8. kolonu aktar
End With
' KayitFormu'nda yeni Tutanak No'yu oluştur
Call YeniTutanakNoOlustur(KayitFormu) ' KayitFormu formunu parametre olarak geçiriyoruz
KayitFormu.Kilit_On
KayitFormu.UpdateToggleButtonState
KayitFormu.cmbKaydet.Visible = True
KayitFormu.cmbKaydet.Enabled = True
KayitFormu.btnIptal.Visible = True
KayitFormu.btnIptal.Enabled = True
KayitFormu.CmdTutanak.Visible = True
KayitFormu.CmdTutanak.Enabled = True
KayitFormu.cmbVERYAR.Visible = True
KayitFormu.cmbVERYAR.Enabled = True
KayitFormu.cmbVERYAR.SetFocus
End Sub