Makro ile veri alma ve kaydetme

mustafa

Altın Üye
Katılım
8 Eylül 2004
Mesajlar
210
Excel Vers. ve Dili
Excel 365 - Türkçe
Altın Üyelik Bitiş Tarihi
14-01-2026
Forumdaki herkese iyi akşamlar.
Ekteki belgedeki personel sayfasında herhangi bir personeli seçtiğimde o personelin bilgileri veriler adlı sayfadan alınsın, eğer personelin bilgilerinde herhangi bir değişiklik yapıp (personel sayfasında) kaydet butonuna tıkladığımda veriler sayfasında personelin bulunduğu satırdaki ilgili yere kaydedilsin.
Personel sayfasında düşeyara formülü ile personel bilgilerini ilgili yerlere getirebiliyorum fakat formüller nedeni ile değişiklik yapma şansım olmuyor.
İnşallah mümkünü olan birşey istemişimdir.
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,058
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Ã?rneğiniz üzerinde biraz çalıştım. Umarım istediğiniz gibi olmuştur. Formlar kutusundan kullandığınız Listboxu değiştirerek denetim araç kutusundan kullandım. Geri kayıt esnasında formüllere zarar vermemek için formüllerin olduğu satırları atlıyor. Ben bir kaç deneme yaptım ise de,siz mutlaka detaylı inceleyin ki bir yanlışlık olmasın. Bir hata görürseniz lütfen bildirin.
 

mustafa

Altın Üye
Katılım
8 Eylül 2004
Mesajlar
210
Excel Vers. ve Dili
Excel 365 - Türkçe
Altın Üyelik Bitiş Tarihi
14-01-2026
Sayın leventm, elinize sağlık çok ama çok güzel olmuş. Yalnız bir ricam daha olacak. Mümkünse sarıya boyadığım alanlara veri girilmesin. Ayrıca en alttaki Müktesep Gös. ve Müktesep D/K bölümlerine girilen veri kaydedilmiyor. Son olarak kodların nasıl çalıştığı hakkında biraz bilgi verseniz. Üzerinde uğraşıyorum fakat tam olarak çözemiyorum.
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,058
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Sarıya boyalı alanlara doğrulama özelliğini kullanarak, veri girildiğinde uyarı ikazı veren bir özellik ekledim. Diğer hatayıda düzelttim. Makroların nasıl çalıştığıyla ilgili olarak yarın bir şeyler yazmaya çalışırım. Tekrar deneyerek varsa bir aksilik lütfen bildirin.

NOT:Birde mümkünse dosyalarınızı herkesin açabilmesini kolaylaştırmak için winzip ile sıkıştırın.
 

mustafa

Altın Üye
Katılım
8 Eylül 2004
Mesajlar
210
Excel Vers. ve Dili
Excel 365 - Türkçe
Altın Üyelik Bitiş Tarihi
14-01-2026
Sayın leventm, sizin gönderdiğiniz belgedeki kodları kendi belgeme uyarlamak istedim (asıl belgem büyük olduğu için sadece iki sayfasını göndermiştim), fakat olmadı. Kendi belgemdeki Per.Kayıt adlı sayfada bir tane Listbox oluşturup sizin kodlarınızı yapıştırıyorum fakat bir türlü personel isimlerini Listboxa getiremiyorum. Atladığım birşeyler mi var acaba.
Bir de kodlarınızın açıklamalarını yazacaktınız.
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,058
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
bir türlü personel isimlerini Listboxa getiremiyorum
Bunun için tasarım modunda listboxa çift tıklayın. Açılan sayfada sol alt köşede "properties" içindeki "ListFillRange" özelliğinde yazan aralığa yeni dosyanızdaki aralığı tarif edin. Kodların açıklamalarına gelince buna şimdi vaktim olmadı. Vakit bulabilirsen bu akşam yazarım.
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,058
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
hehehee..... eve iş getirmek yasak değil mi sizin evde ?
Sağolsun yerli diziler nedeniyle henüz değil. Ne zaman dizi krizi başlar o zaman sanırım sorunda başlar :lol:
 
Katılım
9 Şubat 2005
Mesajlar
63
Excel Vers. ve Dili
excel 2007 Turkce+ingilizce
sayın leventm
Dosya çok güzel olmuş fakat isim girileceği bölümde, isim ararken ismin başharfinden sonraki harfi yazıp arama yapamıyoruz.
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,058
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Bunu sağlamak için listboxun,"MatchEntry" özelliğini "1-fm-MatchEntryComplete" seklinde seçmek yeterlidir. Bu arada şunuda belirtmeliyim dosyayı ben hazırlamadım. Çalışma; mustafa beye aittir. Ben sadece makroların yazımında yardımcı oldum.
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,058
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Mustafa bey

Aşağıda listboxa bağlı çalışan makronun her satırının yanına ne yaptığını yazdım. Umarım yardımcı olur.
[vb:1:34b9c5e053]Private Sub ListBox1_Click()
On Error Resume Next 'hata durumunda hatayı pas geçmesini sağlar
TextBox1 = "" 'textbox1 deki veriyi siler
a = Sheets("PerBil").Range("D5:D34").Find(ListBox1.Value).Row 'listbox1 de seçilen ismin, Perbil sayfasındaki D5:D34 aralığında yerini bulur ve satır değerini a değişkenine atar
For sira = 8 To 52 'döngü başlangıcı Perbil sayfasının 8(H sütunu) den başlayarak 52(AZ sütunu) ye kadar sütunların taranmasını sağlar
If sira <= 19 Then Cells(sira - 4, 7) = Sheets("Perbil").Cells(a, sira).Value 'Sicil bilgilerini kayıt dosyasındaki yerine taşır
If sira >= 20 And sira < 24 Then Cells(sira - 2, 10) = Sheets("Perbil").Cells(a, sira).Value 'tazminat bilgilerini kayıt dosyasındaki yerine taşır
If sira >= 24 And sira < 36 Then Cells(sira - 20, 10) = Sheets("Perbil").Cells(a, sira).Value 'terfi bilgilerini kayıt dosyasındaki yerine taşır
If sira >= 36 And sira < 48 Then Cells(sira - 18, 7) = Sheets("Perbil").Cells(a, sira).Value 'kesinti bilgilerini kayıt dosyasındaki yerine taşır
If sira >= 48 Then Cells(sira - 24, 10) = Sheets("Perbil").Cells(a, sira).Value 'diğer bilgilerini kayıt dosyasındaki yerine taşır
Next sira 'döngünün tekrar For komutuna yani başa dönmesini sağlar
End Sub
[/vb:1:34b9c5e053]

NOT:Verileri geri kaydet butonundaki makroda yukarıdaki işlemin tam tersini yapmaktadır.
 

mustafa

Altın Üye
Katılım
8 Eylül 2004
Mesajlar
210
Excel Vers. ve Dili
Excel 365 - Türkçe
Altın Üyelik Bitiş Tarihi
14-01-2026
Sayın leventm, teşekkür ederim. Çok güzel açıklamışsınız. Kolay gelsin.
 

mustafa

Altın Üye
Katılım
8 Eylül 2004
Mesajlar
210
Excel Vers. ve Dili
Excel 365 - Türkçe
Altın Üyelik Bitiş Tarihi
14-01-2026
leventm' Alıntı:
If sira <= 19 Then Cells(sira - 4, 7) = Sheets("Perbil").Cells(a, sira).Value 'Sicil bilgilerini kayıt dosyasındaki yerine taşır
If sira >= 20 And sira < 24 Then Cells(sira - 2, 10) = Sheets("Perbil").Cells(a, sira).Value 'tazminat bilgilerini kayıt dosyasındaki yerine taşır
If sira >= 24 And sira < 36 Then Cells(sira - 20, 10) = Sheets("Perbil").Cells(a, sira).Value 'terfi bilgilerini kayıt dosyasındaki yerine taşır
End Sub
[/vb]
Sayın leventm, sizi yine rahatsız edecem. Fakat işin içinden çıkamadım. Yukarıdaki kodunuzdaki
Kod:
If sira <= 19 Then Cells(sira - 4, 7) =
Kod:
If sira >= 20 And sira < 24 Then Cells(sira - 2, 10) =
Kod:
If sira >= 24 And sira < 36 Then Cells(sira - 20, 10) =
satırlar ne anlama geliyor. Cevap verirseniz çok memnun olacağım.
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,058
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
öncelikle aşağıdaki satıra bakarsak
[vb:1:b80384dfb3]For sira = 8 To 52 [/vb:1:b80384dfb3]
bu satırdaki 8 ve 52 rakamları sütun numaralarını ifade etmektedir. Yani 1 rakamı A sütununu ifade ettiğini düşünürsek (R1C1 başvuru sitili) 8 rakamı H sütununu, 52 rakamıda AZ sütununu ifade etmektedir. Bu rakamlar sizin dosyanızdaki PERBİL sayfasından PER.KAYIT sayfasına aktarılacak bilgilerin başlangıç ve bitiş sütun numaralarıdır.
If sira <= 19 Then Cells(sira - 4, 7) = Sheets("Perbil").Cells(a, sira).Value 'Sicil bilgilerini kayıt dosyasındaki yerine taşır
Þimdi bu satırı incelersek sicil bilgilerinin başlangıç sütun nosu 8,bitiş nosu ise 19 dur. Bu komut "sira" değeri 19 a kadar olan değeri aldığında (19 dahil) if komutu aktif hale gelerek devamındaki "Cells(sira - 4, 7) = Sheets("Perbil").Cells(a, sira)" satırını çalıştırır. sira değeri 19'u aştığında bu satır artık pasif hale gelerek işlemeyecektir.bu satırdaki cells(sira-4,7) Per.kayıt sayfasındaki yazılacak hücreyi belirler, örneğin sira=8 ise bu hücre cells(8-4,7) yani cells(4,7) olacaktır. cells(4,7)=G4 hücresidir. bu hücreye "Sheets("Perbil").Cells(a, sira).Value" satırındaki değer atanır. buda perbil sayfasındaki cells(a,sira) yani cells(a=seçilen kişinin bulunduğu satır no,8) hücresindeki değerdir. 8=H sütunu.

Makronun nasıl çalıştığını anlamanın en iyi yolu,öncelikle kağıt üzerinde çalıştırmaktır. Yani her değişkene makroda alabileceği bir değeri vererek
neye karşılık geldiğini incelemektir. örneğin Kenan Çelik ismini seçtiniz bu durumda a=10 olacaktır. sira=8 den başlayarak sırası ile 9,10....52 ye kadar değerler alacaktır. öncelikle sira=8 kabul ederek makroyu kağıt üzerinde çalıştırın. (a=10 olduğundan sadece 10.satırdaki değerler kayıt sayfasına aktarılacaktır)

Biraz karışık oldu farkındayım fakat bunu sözle ifade etmek biraz zor, umarım açıklayıcı olmuştur. Diğer satırlardaki mantıkta aynıdır.
 

mustafa

Altın Üye
Katılım
8 Eylül 2004
Mesajlar
210
Excel Vers. ve Dili
Excel 365 - Türkçe
Altın Üyelik Bitiş Tarihi
14-01-2026
Sayın leventm, kodlar üzerinde epeyce kafa yormuştum fakat bir türlü çözememiştim. Size sorayım mı sormayayım mı diye tereddütlerim vardı. Çaresiz kalınca da sormaya karar verdim. Eğer sormasaydım aşağıdaki bölümü çözebileceğimi (hani meşhur bir söz vardır ya kırk yıl düşünsem aklıma gelmezdi diye) hiç sanmıyorum.
leventm' Alıntı:
bu satırdaki cells(sira-4,7) Per.kayıt sayfasındaki yazılacak hücreyi belirler, örneğin sira=8 ise bu hücre cells(8-4,7) yani cells(4,7) olacaktır. cells(4,7)=G4 hücresidir.
Cevap vermenizden cesaret alarak aşağıdaki soruları da sormak istiyorum. Verileri geri kaydetme kodundaki
Kod:
Sub verikaydet()
For sut = 7 To 10 Step 3
End Sub
satırında Step 3 ne ifade ediyor.

Kod:
Sub verikaydet()
For geri = 4 To 29
End Sub
Personeli çağırma kodunda taranacak alan 8 to 52 (H:AZ), peki 4 to 29 neresi.

Son olarak aşağıdaki satırdaki geri + 4 ne anlama geliyor.
Kod:
Sub verikaydet()
If geri <= 14 Then Sheets("Perbil").Cells(a, geri + 4) =
End Sub
NOT: Kusura bakmayın 40' ından sonra Excel öğrenmeye kalkışılırsa durum aynen benim durumum gibi olur (hani 40' ından sonra şoför olanın arabasına binmemeye gayret edin denilir ya işte o durum).
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,058
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Sn mustafa

Elimden geldiğince yardımcı olmaya gayret ederim. Siz öğrenme isteğinizi asla kaybetmeyin. Malum öğrenmenin yaşı yoktur. Þimdi gelelim sorularınıza
satırında Step 3 ne ifade ediyor.
Bir döngünün başlangıç sayısından itibaren artma aralığını belirler. Yani ilk değer sut=7 olurken,bir sonraki değer sut=8 olmaz,step 3 nedeniyle sut=10 olacaktır. eğer step değeri belirtilmezse artış birer birer olacaktır.
Personeli çağırma kodunda taranacak alan 8 to 52 (H:AZ), peki 4 to 29 neresi.
4, kayıt sayfasındaki verilerin kayıtlı olduğu ilk satır sayısı,29 ise son satır sayısıdır.
bu döngü kayıt sayfasındaki verileri 4.üncü satırdan 29.uncu satıra kadar taramak içindir.
Son olarak aşağıdaki satırdaki geri + 4 ne anlama geliyor.
buradada perbil sayfasına verilerin aktarılması için ayrı bir döngü kurmamak için aynı döngüden istifade edilmiştir. Yani kayit sayfasındaki bir satırdaki değer perbil sayfasındaki bir sütuna aktarılmaktadır. "geri" değişkeni kayit sayfasındaki satırları tanımlalar, aktaracağımız veri sayısı aynı olduğuna göre kayıt sayfasındaki satır sayısı=perbil sayfasındaki sütun sayısıdır. Bu durumda geri=4 olduğunda, sut=7 (kayıt safasında sadece 7 ve 10. sütunlarda veri vardır. ) için

Sheets("Perbil").Cells(a, geri + 4) = Cells(geri, sut).Value satırı

Sheets("Perbil").Cells(a, 4+ 4) = Cells(4, 7).Value yani

Sheets("Perbil").Cells(10, 8) = Cells(4, 7).Value, (a=kayıt edilecek ismin bulunduğunu satır sayısıdır. ör. Kena Çelik için satır no=10 dur. )

bu satırın anlamı, perbil sayfasındaki 10.satır 8.sütuna kayit sayfasındaki 4.satır, 7. sütun değerini aktar. 10. satır,8. sütun=H10 hücresini ifade eder, 4.satır,7.sütun=G4 hücresidir.
 

mustafa

Altın Üye
Katılım
8 Eylül 2004
Mesajlar
210
Excel Vers. ve Dili
Excel 365 - Türkçe
Altın Üyelik Bitiş Tarihi
14-01-2026
Sayın leventm, tekrar tekrar teşekkür ederim. Elinize sağlık. Pek çok kişinin faydalanacağı bir konu oldu galiba.
 
Katılım
18 Ağustos 2006
Mesajlar
154
Excel Vers. ve Dili
Mr Step Back
Sevgili arkada&#351;lar;
Kod:
Sub gtkayit()
Const ERRSTR As String = "Dosya saklanamad&#305;." & _
vbNewLine & vbNewLine
Dim fName As String
On Error GoTo Handler
With ActiveWorkbook
fName = .Sheets("rapor").Range("A2").Text
If Len(Trim(fName)) = 0 Then _
Err.Raise 32769
If Mid(fName, Len(fName) - 3, 1) <> "." Then _
fName = fName & ".xls"
.SaveAs Filename:=fName
Application.Quit
ActiveWorkbook.Close
End With
Exit Sub
Handler:
If Err.Number = 32769 Then
MsgBox ERRSTR & "Rapor!A2 h&#252;cresi bo&#351;"
Else
MsgBox ERRSTR & "Rapor!A2 h&#252;cresinde ge&#231;erli dosya ad&#305;n&#305; kontrol edin."
End If
End Sub
&#351;eklinde kulland&#305;&#287;&#305;m bir kodum var. Bu kodla A2 h&#252;cresindeki de&#287;eri dosya ad&#305; olarak verdirip &#231;al&#305;&#351;ma kitab&#305;n&#305; Belgelerime kaydedip kapat&#305;yorum.

Fakat benim istedi&#287;im asl&#305;nda &#351;u: &#199;al&#305;&#351;ma kitab&#305;n&#305; belgelerime de&#287;il de farkl&#305; bir klas&#246;re kay&#305;t yapmak istiyorum...
Veya belki de zor de&#287;ilse ilk kay&#305;ti &#231;in, kay&#305;t edilecek yeri g&#246;zat penceresi ile g&#246;sterrrek kay&#305;t yapmas&#305;, daha sonra ki kay&#305;tlarda bu ilk kay&#305;t ayar&#305;n&#305; kullan&#305;p g&#246;zat penceresini g&#246;stermeden kay&#305;t yapmas&#305;.

Bu konuda yard&#305;mc&#305; olabilir misiniz...
 
Üst