• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

Bir userformdan değişen sayfaya veri aktarımı

  • Konbuyu başlatan Konbuyu başlatan cems
  • Başlangıç tarihi Başlangıç tarihi

cems

Altın Üye
Katılım
2 Eylül 2005
Mesajlar
2,581
Excel Vers. ve Dili
office 2010 tr 32bit
Userform üzerindeki combobox ile işlemin yapılması gereken sayfa seçilince o sayfa geliyor.

userformdaki KAYDET BUL SİL DEĞİŞTİR tuşlarındaki kodlar kod yazma esnasında sayfa1 olarak kuruluyor ve işlemleri başarı ile yapıyor.

Sorun: Veri tabanı olarak bir ay için sayfa1 olarak hazırlanmış sayfa ve userform kodları , sayfaları 12 aya çıkarınca doğal olarak yine sayfa1 de işleme devam edecek.

Çözüm 1: her ay için bir userform kopyası yaparak kodlardaki sayfa1 leri ay ismi olarak değiştirmek , ancak bu dosyada inanılmaz ağırlığa sebep olacak.

Çözüm 2 ve SORU : Tek bir userform kodlarında bulunan sayfa tanımlayıcıyı , combobox ile seçildiğinde gelmiş olan sayfaya işlem yapacak şekilde nasıl hassaslaştırabilirim ?
 

Ekli dosyalar

Son düzenleme:
Ne yapmak istediğinizi tam olarak bilmiyorum ama, aşağıdaki kodları çalıştırıp inceledikten sonra kendinize uyarlayabilirsiniz sanırım.

Kod:
Dim MySh As Worksheet                   'Bu satır Modülün en üstünde 1. satırda olacak
'
Private Sub ComboBox1_Change()
    MsgBox ComboBox1.Text & " veritabanı seçildi"
    Set MySh = Worksheets(ComboBox1.Text)
End Sub
'
Private Sub CommandButton1_Click()
    sor = MsgBox("Bu tuş ile yukarıdaki veri yeni bir veri olarak kaydedilecektir. Amacınız değiştirme ise DEĞİŞTİR tuşu kullanınız", vbYesNo, "UYARI")
    If sor = vbNo Then Exit Sub
    If TextBox2.Text <> "" Then
        Son_Dolu_Satir = MySh.Range("b65536").End(xlUp).Row
        Bos_Satir = Son_Dolu_Satir + 1
        MySh.Range("B" & Bos_Satir).Value = Application.WorksheetFunction.Max(MySh.Range("b:b")) + 1
        MySh.Range("B" & Bos_Satir).Value = TextBox1.Text
        MySh.Range("C" & Bos_Satir).Value = TextBox2.Text
        MySh.Range("d" & Bos_Satir).Value = TextBox3.Text
    End If
End Sub
 
Son düzenleme:
Yapmak istediğim , userformu ile beraber prototip şablon olarak geliştirilen bir sayfayı 12 kere AY adları ile çoğaltmaktı . Burada karşılaştığım problem ; userformda seçilen herhangi bir sayfaya kayıt ve diğer işlemleri yapmaktı.

Combobox ile sözgelimi EKİM ayı sayfası alta açılsa da userformun kodları hala sayfa1 e gidiyordu.

Sizin sihirli kodlarınız olan

Kod:
Dim MySh As Worksheet                   'Bu satır Modülün en üstünde 1. satırda olacak
'
Private Sub ComboBox1_Change()
  '  MsgBox ComboBox1.Text & " veritabanı seçildi"
[b]Set MySh = Worksheets(ComboBox1.Text)[/b]    ' sihirli kod kısmı :)

If ComboBox1.Value = "Sayfa1" Then
Sheets("sayfa1").Activate
MsgBox " sayfa1 veritabanı seçildi"
End If
If ComboBox1.Value = "EKİM" Then
Sheets("EKİM").Activate
MsgBox " EKİM veritabanı seçildi"
End If
If ComboBox1.Value = "KASIM" Then
Sheets("KASIM").Activate
MsgBox " KASIM veritabanı seçildi"
End If
End Sub

Altına activate kodlarını ekleyince hem sayfayı alta çağırma hem userforma çağrılmış olan sayfada işlem yaptırmak mümkün oldu ki , tam bunu hedeflemiştim.

Sizin verdiğiniz kodlar sayfa1 altta sabit kalsa da userformdaki comboboxta seçilerek istenmiş olan sayfaya kayıt yapıyordu, doğru ancak izlemem zordu , bu yüzden aynı anda seçilen sayfayı altta activate ederek sonuca sizin yardımınızla ulaştım.

Yani userform EKİM ayında işlem yaparken , userform kapanınca altında sayfa1 değil direk EKİM sayfasını görüyor oldum.

Şimdi bunu bul değiştir sil kodlarına uyarlamaya çalışacağım .

Çok teşekkür ederim
 
Son düzenleme:
Cem Bey;

VBA kodlarını veri tabanı olarak kullanılan dosyalarda çalıştırmamak her zaman faydalıdır. Bir şekilde kodlardan dolayı dosya zarar görürse, veri tabanını kurtarmak sıkıntıya yol açabilir.

Bu nedenle; kodları Excel'de yazıp, veri tabanı olarak kullanılan başka bir dosyada yazma, güncelleme, silme vb işleri yapılabilir. Söz konusu veri tabanı dosyası başka bir Excel dosyası olduğu gibi, bir Text dosyası ya da MDB dosyası da olabilir.

Örneğin, veri tabanı olarak bir Text dosyasının kullanıldığı ufak bir proje ektedir.

.
 

Ekli dosyalar

Örneğin, veri tabanı olarak bir Text dosyasının kullanıldığı ufak bir proje ektedir.

.

Bu dosyayı dikkatle inceleyeceğim. Bu arada asıl dosyada sayfa değiştirmeyi uygulamış olsam da tuş altlarında kod değişikliği yapmak da baya zaman alacak gibi görünüyor , zira tuşların hepsi sayfa1 e endeksli . Dolayısı ile kaydı , değişikliği sil ve bul fonksiyonları , userformun altına açılan sayfada değil halen sayfa1den alınıp veriliyor.

Belki gözleminiz ile daha pratik fikirler verebilirsiniz ya da esinleme alabileceğim arşiv adresi gösterebilirsniz umudu ile dosyayı şifreli zip ile buradan gönderip şifreyi özelinizden gönderiyorum . Bunun nedeni şu an dosyanın kimseye faydası olmayacağı ve zaman kaybettireceği fikrimdendir. Şu anlık üyelerin indirmesine açık , doğru çalışan bir dosya değildir.

Kısaca dosya bir personel veritabanı, kendisi ile bir resimler klasörü var ve bu klasör C:\resimler şeklinde sürücüye konduğunda ve içine resim konulduğunda , çalışanın tc ve işlem yapılacak ay seçildikten sonra bul ile basit işe giriş ve ücretleme anlaşması ile ay boyunca takip çizelgesi tek bir userform üzerinde , çalışanın resmi ile birlikte , kişi hatasını sıfıra duşurmek amaçlı çıkarılıyor ( ya da bunu yapmaya çalışıyorum.) Tablonun verilerine göre de en altta işi aksatmasına göre ücret kaybı hesaplanarak ödenecek miktar bulunuyor.

Dosya her birey için her ayı 30 gün ve bütün iş günlerinde gelmiş kabul ederek , aksamalar oldukça aksatma kodu karşılığına göre ücretten düşürme prensibine dayanıyor. Bunun nedeni program 100 kişilik ve bunlardan günde 3 yada 5i işi aksatabilir , sadece aksatanları tabloda işlemenin daha kısa zaman alması ve 95 kişiye Geldi işaretlemekten kurtarması.
 

Ekli dosyalar

Son düzenleme:
Haluk bey

Gönderdiğiniz dosyada userform açılırken şu hatayı verdi :
Kod:
Private Sub UserForm_Initialize()
    CloseDB
    TextBox1.Enabled = False
    TextBox2.MultiLine = True
   [b] Open DataFile For Random As #1 Len = Len(RS) [/b]  [b]Runtime error 76 path not found [/b]
    RecNo = LOF(1) / Len(RS)
    RecNo = RecNo + 1
    TextBox1 = RecNo
    Label5.Caption = "Toplam Kayıt  = " & RecNo - 1
    Call FillCombo
    TextBox2 = Empty
    TextBox3 = Empty
    TextBox4 = Empty
    TextBox5 = Empty
    TextBox6 = Empty
    CommandButton2.Enabled = False
    CommandButton3.Enabled = False
End Sub

Userformun açılması için ne yapmalıyım ? DB konusuna alışık değilim


Düzeltme : kodları incelerken datafile ve tempfile txtleri açtım ve C altına koydum . Combobox1.change altında Get #1, RecNum, RS satırında Bad file No (runtime error 63 ) hatası verdi, bunu ' ile geçtim userform açıldı , kaydetmek istediğimde textbox5 için type mismatch hatası verdi ama data file içine bir kayıt attı.
Yani bir şekilde çalıştırdım :) şimdi adım adım deep investigation yapıyorum tam anlamak için
 
Son düzenleme:
Geri
Üst