Excel Vba Forum - Excelce.Net
SORU ve CEVAPLAR (Yazılabilir) => Microsoft Excel, Vba, Makro, Formül vb. Soruları => Çözülen Excel, Vba, Makro, Formül vb. Soruları => Konuyu başlatan: serul - 13 Aralık 2010, 13:54:35
-
Arkadaşlar kuruma yeni kayıtlarımız başlamak üzere, otomasyon programımız çok çetrefilli ihtiyacımızı karşılamıyor. Ekte sayfalar üzerine açıklamalar yazmaya çalıştım. İlgilenebilir misiniz?
[Forum yazılım güncelleme esnasında sorun oluştuğundan eklendi silinmiştir.]
-
Arkadaşlar rar dosyası 7 kez indirilmiş olmasına karşın kimse birşey yazmadı. Fonksiyonlar yardımı ile bişeyler yapmaya çalıştım bi kontrol edermisiniz ?
[Forum yazılım güncelleme esnasında sorun oluştuğundan eklendi silinmiştir.]
-
Merhaba,
Açılan liste ve fiyat getirme işlemini yaptım.
Ekteki dosyayı inceler misiniz.
[Forum yazılım güncelleme esnasında sorun oluştuğundan eklendi silinmiştir.]
-
Taksit tutarı kısmındaki EĞER döngümü kontrol edebilirmisiniz? Elle girdiğim tarih değerinde tutarsızlık yapıyor. Bulunduğumuz yılın (2010-2011-..)
Haziran ayında daha küçük bir tarihte isek son tutarı 12 taksite kadar bölebilmeli eğer haziran ağustos arasında ise 10 taksite, diğerinde 8 taksite kadar bölme seçeneği ekleyebilirmiyiz? Bu seçenek onaylandıktan sonra ödeme tablosuna ve MUHASEBE TAKİP sayfasına taksitler otomatik doldurulabilir mi?
-
Makro ile bir şeyler yaptım...
(Yeni hali eklendiğinden buradaki ek silinmiştir.)
-
Bülent Bey : EĞER fonksiyonuna bağlı olarak taksit sayısını açılan pencereden seçme ihtimalimiz olur mu ?
Bunu form şeklinde tasarlasak bizim için bir zararı var mıdır ?
-
Bülent Bey : EĞER fonksiyonuna bağlı olarak taksit sayısını açılan pencereden seçme ihtimalimiz olur mu ?
Olur. Yeni hali ekte...
Bunu form şeklinde tasarlasak bizim için bir zararı var mıdır ?
Nasıl isterseniz o şekilde tasarlayıp kullanabilirsiniz tabi ki, neden zararı olsun.
[Forum yazılım güncelleme esnasında sorun oluştuğundan eklendi silinmiştir.]
-
Güzel olmuş Bülent Bey ! Elinize sağlık. Biraz tarif ile ben bunu forma çevirebilir miyim ? Aradan bende biras öğrenmiş olurum. Her seferinde arkadaşları yormak istemem.
-
Çevirebilirsiniz tabi... Başkaları yapabiliyorsa, siz de yaparsınız. ;)
Deneyin bakalım.
-
Sorduğunuzu 2 şekilde yapabilirsiniz:
1-RowSource ile arada sütun gizleyerek:
Private Sub UserForm_Initialize()
ListBox1.ColumnCount = 6 '--> 6 sütun alınır
ListBox1.ColumnWidths = "60;0;0;0;0;60" ' --> ilk ve son sütunların genişlikleri 60, diğerleri 0 olunca sadece 60'lar görünecek.
ListBox1.RowSource = "gruplar!A2:F10" '--> A2:F10 arasını alıyoruz.
2-AddItem yöntemi:
Private Sub UserForm_Initialize()
ListBox1.Clear
ListBox1.ColumnCount = 2
ListBox1.ColumnWidths = "60;60"
For i = 2 To 12 ' A2'den A12'ye kadar olanları alacağımız döngü başlangıcı
ListBox1.AddItem 'Listbox'a satır satır veri ekleyeceğiz...
ListBox1.List(i - 2, 0) = Range("A" & i) ' Listbox'un ilk sütununa A sütunundan
ListBox1.List(i - 2, 1) = Range("F" & i) ' Listbox'un ikinci sütununa F sütunundan veri alıyoruz
Next i
End Sub
-
Bir ComboBox tanımladım az önceki ListBox ı ComboBox yaptım. Ben bu ComboBox da herhangi bir veriyi seçtiğimde seçim satırındaki diğer bilgiyi Label veya herhangi bir kutuya otomatik yazdırmaya çalışıyorum. Ne yazabilirim ?
Private Sub ComboBox1_Change()
Label1.Caption = ComboBox1.List(ComboBox1.ListIndex, 0) ' Combo'dan seçilenin ilk sütunu Label1'in Caption'una
TextBox1.Value = ComboBox1.List(ComboBox1.ListIndex, 1) ' Combo'dan seçilenin ikinci sütunu Textbox1'in Value'sine
End Sub
Listbox ve Combobox ilk index'leri 0'dan başlar.
-
Bülent Bey taksit sayısını seçebilmek için combobox oluşturdum.
Private Sub UserForm_Initialize()
ComboBox1.Clear
ComboBox1.ColumnCount = 1
ComboBox1.ColumnWidths = "15"
ListBox1.Clear
ListBox1.ColumnCount = 2
ListBox1.ColumnWidths = "60;0"
ComboBox1.RowSource = "gruplar!E2:E15"
For i = 2 To 12
ListBox1.AddItem
ListBox1.List(i - 2, 0) = Range("gruplar!A" & i)
ListBox1.List(i - 2, 1) = Range("gruplar!C" & i)
Next i
End Sub
Private Sub ListBox1_Change()
TextBox6.Value = ListBox1.List(ListBox1.ListIndex, 1)
End Sub
ben ComboBox1 i belli bir şarta bağlı olarak E5 e kadar veya E9 a kadar kısımdan seçtirebilir miyim ?
-
Bülent Bey şimdi çalışmamda bir matematiksel işlem yazmak istiyorum. Basit bir matematiksel işlem : Label6 da yazılı değeri comboBox2 de seçilen değere bölüp sonucu AYLIK label e yazdırmak istiyorum ?!
-
Ben ComboBox1 i belli bir şarta bağlı olarak E5 e kadar veya E9 a kadar kısımdan seçtirebilir miyim ?
Bunu yaptınız mı?
Bülent Bey şimdi çalışmamda bir matematiksel işlem yazmak istiyorum. Basit bir matematiksel işlem : Label6 da yazılı değeri comboBox2 de seçilen değere bölüp sonucu AYLIK label e yazdırmak istiyorum ?!
Nesnelerin değerlerinin varsayılan biçimleri metindir. Matematiksel işlem yapabilmek için sayıya çevirmek gerekiyor;
Private Sub CommandButton1_Click()
lblAYLIK.Caption = CDbl(Label6) / CDbl(ComboBox2)
End Sub
-
Bunu yaptınız mı?
yok onu yapmadım onu ihtiyaçtan değilde meraktan sormuştum. Kodlardaki CDbl metni matematiksel değere çeviriyor demekki. Peki kodun başındaki lbl nin işlevi nedir ?
-
(run time error 424 )
Private Sub CommandButton1_Click()
lblAYLIK.Caption = CDbl(Label6) / CDbl(ComboBox2)
End Sub
Yanlış var mı ?
[Forum yazılım güncelleme esnasında sorun oluştuğundan eklendi silinmiştir.]
-
yok onu yapmadım onu ihtiyaçtan değilde meraktan sormuştum.
Yapılabilir. If şartı ile kriter belirlenebilir.
Kodlardaki CDbl metni matematiksel değere çeviriyor demekki.
Evet. Forumda değişkenler konusunu inceleyebilirsiniz.
Peki kodun başındaki lbl nin işlevi nedir ?
Label'e verilen isim.
Yukarıdaki mesajınızda AYLIK label ifadesini kullandığınız için ben de lblAYLIK olarak isimlendirdim.
Kullanım kolaylığı için kontroller isimlendirilirken başlarına türünü belirten ifade konması daha faydalı oluyor.
Label için "lbl", Textbox için "txt", CommandButton için "cmd", Combobox için "cb" gibi...
-
(run time error 424 )
Private Sub CommandButton1_Click()
lblAYLIK.Caption = CDbl(Label6) / CDbl(ComboBox2)
End Sub
Yanlış var mı ?
Label'inizin adı nedir?
AYLIK mı lblAYLIK mı?
Düzeltirseniz çalışacaktır.
-
Bu Formüle OptionButton1 seçili olduğunda %15 iskonto yaptırmak istiyorum hangi kodu eklemeliyim ?
Forumda değişkenler adında aratma yaptırdım bilgiye ulaşamadım :-[
-
Forumda değişkenler adında aratma yaptırdım bilgiye ulaşamadım :-[
Haklısınız. Bölümü açmış, ancak henüz içeriğini doldurmamışım. :(
Bu Formüle OptionButton1 seçili olduğunda %15 iskonto yaptırmak istiyorum hangi kodu eklemeliyim ?
OptionButton yerine CheckBox kullanırsanız işaretleyip, işareti kaldırmak mümkün olacaktır.
Şu şekilde de indirim hesabını yaptırabilirsiniz:
Private Sub CommandButton1_Click()
If CheckBox1.Value = True Then
AYLIK.Caption = (CDbl(Label6) / CDbl(ComboBox2)) - ((CDbl(Label6) / CDbl(ComboBox2)) * 15 / 100)
Else
AYLIK.Caption = CDbl(Label6) / CDbl(ComboBox2)
End If
End Sub
-
Seçilen taksit sayısına göre farklı indirim seçenekleri oluşturabilmek için
Private Sub CommandButton1_Click()
If ComboBox2.Value = 2 Then
AYLIK.Caption = (CDbl(Label6) / CDbl(ComboBox2)) - ((CDbl(Label6) / CDbl(ComboBox2)) * 15 / 100)
Label13.Caption = (CDbl(Label6)) - (CDbl(Label6) * 15 / 100)
Else
AYLIK.Caption = CDbl(Label6) / CDbl(ComboBox2)
Label13.Caption = "İNDİRİM YAPILAMAZ "
End If
End Sub
yazdım çalışıyor. Okuldan hatırladığım kadarıyla between denilen aralık tanımlama komutları vardı. Tarihe göre excelimde aylık taksit sayısı çıkıyor ve combobox2 bunu listeliyor. Yazdığım şart sadece 2 taksitte işliyor. Farklı if şartlarını içiçemi kullanmalıyım ?
-
İçiçe IF veya Select Case kullanabilirsiniz.
Örnek:
Dim Number
Number = 8 ' Initialize variable.
Select Case Number ' Evaluate Number.
Case 1 To 5 ' Number between 1 and 5, inclusive.
Debug.Print "Between 1 and 5"
' The following is the only Case clause that evaluates to True.
Case 6, 7, 8 ' Number between 6 and 8.
Debug.Print "Between 6 and 8"
Case 9 To 10 ' Number is 9 or 10.
Debug.Print "Greater than 8"
Case Else ' Other values.
Debug.Print "Not between 1 and 10"
End Select
-
Bülent Bey hazırlamış olduğunuz değişkenler sayfasını inceledim. Elinize sağlık.
Private Sub UserForm_Initialize()
Label4 = FormatDateTime(Now, vbShortDate)
ComboBox1.Clear
ComboBox1.ColumnCount = 2
ComboBox1.ColumnWidths = "40;0"
ComboBox1.RowSource = "GRUPLAR!A2:B10"
ComboBox2.ColumnCount = 1
ComboBox2.ColumnWidths = "8"
ComboBox2.RowSource = "GRUPLAR!D2:D16"
Dim tarh As Date
Dim TextBox4 As Byte
Dim TextBox3 As Byte
End Sub
tarh benim label kısmım. Bu tarh kısmını Haziran ile karşılaştırıp sonuca göre If döngüsüne ekleyeceğim. Tarihi nasıl karşılaştırabiliriz ?
TextBox3 ve TextBox4 e sadece rakam girilmesini Dim ..........As Byte ile engelleyemiyorum (Çünkü bu kod excelin o labelda yazılanı tanıması için) ?
-
Serkan Bey,
Siz yapmak istediğinizi bana satır satır ifade edin, ben kodlamasına yardımcı olayım.
Sonra dosyanızda uygulamayı deneyin...
-
Forma Veli,Öğrenci,İletişim bilgileri girilecek. Yazı olan yerlere sadece yazı, rakam olacak yerlere sadece rakam yazılabilmeli. Hesaplama butonu istediğim gibi çalışıyor. Kaydet butonu tıklandığında DATA sayfasına aynı satıra veli,öğrenci ad-soyad, veli cep telefonu ve kaç taksit ise taksit ödeme miktarları ve tarihleri aylık sütunlara yerleştirmek istiyorum.
[Forum yazılım güncelleme esnasında sorun oluştuğundan eklendi silinmiştir.]
-
Formunuza istediğiniz alanları/nesneleri ekleyip, dosyanızın son halini foruma ekler misiniz? Onun üzerinden gidelim.
-
Peki
-
DATA sayfasının 1. satırına şu başlıkları yazın:
VELİ ADI SOYADI
ÖĞRENCİ ADI SOYADI
VELİ CEP TELEFONU
VELİ EV TELEFONU
SINIFI
TUTAR
TAKSİT ADEDİ
TAKSİT TUTARI
KAYDET düğmesine şu kodları atayın:
Private Sub KAYDT_Click()
Dim say As Long
say = ThisWorkbook.Worksheets("DATA").Range("A65530").End(xlUp).Row + 1
ThisWorkbook.Worksheets("DATA").Range("A" & say) = TextBox2 ' VELİ ADI
ThisWorkbook.Worksheets("DATA").Range("B" & say) = TextBox1 ' ÖĞRENCİ ADI
ThisWorkbook.Worksheets("DATA").Range("C" & say) = TextBox3 ' VELİ CEP TEL
ThisWorkbook.Worksheets("DATA").Range("D" & say) = TextBox4 ' VELİ EV TEL
ThisWorkbook.Worksheets("DATA").Range("E" & say) = ComboBox1 ' SINIFI
ThisWorkbook.Worksheets("DATA").Range("F" & say) = CDbl(Label6) * 1 ' TUTAR
ThisWorkbook.Worksheets("DATA").Range("G" & say) = CDbl(ComboBox2) * 1 ' TAKSİT ADEDİ
ThisWorkbook.Worksheets("DATA").Range("H" & say) = CDbl(AYLIK.Caption) * 1 ' TAKSİT TUTARI
End Sub
SAYI ve METİN kontrolü için ilgili nesnelere yazılacak kodlar:
Private Sub TextBox1_Change()
If IsNumeric(VBA.Right(TextBox1, 1)) Then TextBox1 = VBA.Left(TextBox1, Len(TextBox1) - 1)
End Sub
Private Sub TextBox2_Change()
If IsNumeric(VBA.Right(TextBox2, 1)) Then TextBox2 = VBA.Left(TextBox2, Len(TextBox2) - 1)
End Sub
Private Sub TextBox3_Change()
If Not IsNumeric(VBA.Right(TextBox3, 1)) Then TextBox3 = VBA.Left(TextBox3, Len(TextBox3) - 1)
End Sub
Private Sub TextBox4_Change()
If Not IsNumeric(VBA.Right(TextBox4, 1)) Then TextBox4 = VBA.Left(TextBox4, Len(TextBox4) - 1)
End Sub
-
Bülent Bey yazdıklarınızı uyguladım güzel oldu. DATA sayfasına taksitle kayıt tarihinden itibaren 1 ay sonra başlayacak şekilde doldurmak istiyorum. DATA kısmına ayları ekledim
-
Ay'ları Aralık'tan başlatıp, kodları şu şekilde değiştirin:
Private Sub KAYDT_Click()
Dim say As Long
Dim taksitler As Integer
Dim bugun As Date, sonrakiay As Date
say = ThisWorkbook.Worksheets("DATA").Range("A65530").End(xlUp).Row + 1
ThisWorkbook.Worksheets("DATA").Range("A" & say) = TextBox2 ' VELİ ADI
ThisWorkbook.Worksheets("DATA").Range("B" & say) = TextBox1 ' ÖĞRENCİ ADI
ThisWorkbook.Worksheets("DATA").Range("C" & say) = TextBox3 ' VELİ CEP TEL
ThisWorkbook.Worksheets("DATA").Range("D" & say) = TextBox4 ' VELİ EV TEL
ThisWorkbook.Worksheets("DATA").Range("E" & say) = ComboBox1 ' SINIFI
ThisWorkbook.Worksheets("DATA").Range("F" & say) = CDbl(Label6) * 1 ' TUTAR
ThisWorkbook.Worksheets("DATA").Range("G" & say) = CDbl(ComboBox2) * 1 ' TAKSİT ADEDİ
ThisWorkbook.Worksheets("DATA").Range("H" & say) = CDbl(AYLIK.Caption) * 1 ' TAKSİT TUTARI
'Ocak 2011 - J sütunundan (10.sütun) başlıyor... Ödemeler kayıt tarihinden 1 ay sonra başlayacak...
bugun = VBA.Now
sonrakiay = DateAdd("m", 1, bugun) ' Bugünkü ay'a 1 ekle
hangiay = VBA.Month(sonrakiay)
For taksitler = 0 To CDbl(ComboBox2) - 1
ThisWorkbook.Worksheets("DATA").Cells(say, 10 + hangiay + taksitler) = CDbl(AYLIK.Caption) * 1
Next taksitler
End Sub
Yalnız, bu şekilde bir taksitlendirme çok sağlıklı olmayabilir.
-
Çekinceniz nedir Bülent Bey ?
Bulunduğumuz ay Aralık olmasına rağmen taksitleri Şubat ayından başlatıyor :-[
-
Söylediklerimi unutun ve kodları şu şekilde değiştirin:
Private Sub KAYDT_Click()
Dim say As Long
Dim taksitler As Integer
Dim bugun As Date, sonrakiay As Date
say = ThisWorkbook.Worksheets("DATA").Range("A65530").End(xlUp).Row + 1
ThisWorkbook.Worksheets("DATA").Range("A" & say) = TextBox2 ' VELİ ADI
ThisWorkbook.Worksheets("DATA").Range("B" & say) = TextBox1 ' ÖĞRENCİ ADI
ThisWorkbook.Worksheets("DATA").Range("C" & say) = TextBox3 ' VELİ CEP TEL
ThisWorkbook.Worksheets("DATA").Range("D" & say) = TextBox4 ' VELİ EV TEL
ThisWorkbook.Worksheets("DATA").Range("E" & say) = ComboBox1 ' SINIFI
ThisWorkbook.Worksheets("DATA").Range("F" & say) = CDbl(Label6) * 1 ' TUTAR
ThisWorkbook.Worksheets("DATA").Range("G" & say) = CDbl(ComboBox2) * 1 ' TAKSİT ADEDİ
ThisWorkbook.Worksheets("DATA").Range("H" & say) = CDbl(AYLIK.Caption) * 1 ' TAKSİT TUTARI
'Ocak 2011 - J sütunundan (10.sütun) başlıyor... Ödemeler kayıt tarihinden 1 ay sonra başlayacak...
bugun = VBA.Now
sonrakiay = DateAdd("m", 1, bugun) ' Bugünkü ay'a 1 ekle
hangiay = VBA.Month(sonrakiay)
hangiyil = VBA.Year(sonrakiay)
If hangiay = 12 Then hangiyil = hangiyil + 1
tarihbul = DateSerial(hangiyil, hangiay, 1)
baslangic_bul = Worksheets("DATA").Range("A1:IV1").Find(tarihbul).Column
For taksitler = 0 To CDbl(ComboBox2) - 1
ThisWorkbook.Worksheets("DATA").Cells(say, baslangic_bul + taksitler) = CDbl(AYLIK.Caption) * 1
Next taksitler
MsgBox "Kayıt yapıldı.", vbInformation, Application.UserName
End Sub
-
Üstad harika oldu ! :begendim
(textox3 ve textbox4 e yazı yazmak istediğimde run-time error 5 hatası veriyor sadece).
Çok uç bir istekmi olur bilmiyorum affına sığınarak sormak istiyorum :-[ ;
Gruplar kısmında seçilen sınıflara kapasite (kontenjan) sütunu eklemiştim. Kayıt yapıldıkça bu kontenjan eksilse kontenjan 0(sıfır) olduğunda kontenjan dolu mesajı veya ekranda bu sınıf doludur uyarısı belirtebilir miyiz ?
Listbox oluşturdum taksitleri bu alanda da gösterebilir miyim?
-
Ne yazdınız da hata verdi?
-
Gruplar kısmında seçilen sınıflara kapasite (kontenjan) sütunu eklemiştim. Kayıt yapıldıkça bu kontenjan eksilse kontenjan 0(sıfır) olduğunda kontenjan dolu mesajı veya ekranda bu sınıf doludur uyarısı belirtebilir miyiz ?
Yeni bir label ekleyin ve adını lblKontenjan yapın.
ComboBox1 kodlarınızı aşağıdaki şekilde yazın:
Private Sub ComboBox1_Change()
If ComboBox1 = Empty Then Exit Sub
Dim acilan_kontenjan As Integer, satilan_kontenjan As Integer
satilan_kontenjan = 0
Label6.Caption = ComboBox1.List(ComboBox1.ListIndex, 1)
acilan_kontenjan = Val(WorksheetFunction.VLookup(ComboBox1.Text, Worksheets("GRUPLAR").Range("A2:C20"), 3, 0))
On Error Resume Next
satilan_kontenjan = Val(WorksheetFunction.CountIf(Worksheets("DATA").Range("E2:E20"), ComboBox1.Text))
lblKontenjan.Caption = Val(acilan_kontenjan - satilan_kontenjan)
If CDbl(lblKontenjan.Caption) = 0 Then MsgBox "Bu sınıf doludur!", vbCritical, "İşlem yapılamaz!": ComboBox1 = Empty
End Sub
-
Ne yazdınız da hata verdi?
Rakam yerine yazı yazmak istediğimde hata aldım. Veli ve Öğrenci isimleri için rakam yazmamı zaten kabul etmiyor. O kısım oldu.
[Forum yazılım güncelleme esnasında sorun oluştuğundan eklendi silinmiştir.]
-
Rakam yerine yazı yazmak istediğimde hata aldım. Veli ve Öğrenci isimleri için rakam yazmamı zaten kabul etmiyor. O kısım oldu.
Telefon numaraları rakam değil mi?
Rakam ve harf girmek isterseniz daha önceki kısıtlama kodunu silmeniz yeterlidir.
-
Bu formu kullanacak arkadaşın olası yanlışlıklarına bir nebze önlem almak için kısıtlamaları yazdık. İsimlerin olacağı yere rakam istesede giremiyor. Rakam yazması gereken telefon numaraları yerinede yazı giremesin istiyorum. Yazı girmek istediğinde yazamasın. Şuan için yazı yazmak istediğinde run-time error 5 hatası veriyor. Bu hatanın peşine "End" yerine "Debug" tuşuna bastığını düşünün evlere şenlik artık :)
-
Bende hata vermiyor.
Kodların başına aşağıdaki satırı ekler misiniz;
On error resume next
Bu şekilde hata vermeden devam edecektir.
-
Bülent Bey aşağıdaki kod taksitleri satıra sıralıyor. Yazıcı sayfası oluşturmaya çalışıyorum. Bu taksitleri herhangi bir sayfaya aynı sütunun altına sıralamaya çalışıyorum.Satırın ne olduğunu bir türlü bulamıyorum. Ne yapmalıyım ?
Private Sub KAYDT_Click()
Dim say As Long
Dim taksitler As Integer
Dim bugun As Date, sonrakiay As Date
say = ThisWorkbook.Worksheets("DATA").Range("A65530").End(xlUp).Row + 1
ThisWorkbook.Worksheets("DATA").Range("A" & say) = TextBox2 ' VELİ ADI
ThisWorkbook.Worksheets("DATA").Range("B" & say) = TextBox1 ' ÖĞRENCİ ADI
ThisWorkbook.Worksheets("DATA").Range("C" & say) = TextBox3 ' VELİ CEP TEL
ThisWorkbook.Worksheets("DATA").Range("D" & say) = TextBox4 ' VELİ EV TEL
ThisWorkbook.Worksheets("DATA").Range("E" & say) = ComboBox1 ' SINIFI
ThisWorkbook.Worksheets("DATA").Range("F" & say) = CDbl(Label6) * 1 ' TUTAR
ThisWorkbook.Worksheets("DATA").Range("G" & say) = CDbl(ComboBox2) * 1 ' TAKSİT ADEDİ
ThisWorkbook.Worksheets("DATA").Range("H" & say) = CDbl(AYLIK.Caption) * 1 ' TAKSİT TUTARI
'Ocak 2011 - J sütunundan (10.sütun) başlıyor... Ödemeler kayıt tarihinden 1 ay sonra başlayacak...
bugun = VBA.Now
sonrakiay = DateAdd("m", 1, bugun) ' Bugünkü ay'a 1 ekle
hangiay = VBA.Month(sonrakiay)
hangiyil = VBA.Year(sonrakiay)
If hangiay = 12 Then hangiyil = hangiyil + 1
tarihbul = DateSerial(hangiyil, hangiay, 1)
baslangic_bul = Worksheets("DATA").Range("A1:IV1").Find(tarihbul).Column
For taksitler = 0 To CDbl(ComboBox2) - 1
ThisWorkbook.Worksheets("DATA").Cells(say, baslangic_bul + taksitler) = CDbl(AYLIK.Caption) * 1
Next taksitler
MsgBox "Kayıt yapıldı.", vbInformation, Application.UserName
End Sub
-
Yazıcıya göndermek için bir sayfa tasarlayın.
Başlıkları oluşturun, veri alanlarını boş bırakın.
Her kayıtta verileri yazdırılacak sayfadaki ilgili yerlere de atıp, yazıcıya gönderebilirsiniz.
-
Form içerisinde bunu yaptıramıyorum. Senet sayfasını ayrıca açmadan yazdırmak istiyorum.
Private Sub Yazdir_Click()
Dim say As Long
Dim taksitler As Integer
Dim bugun As Date, sonrakiay As Date
say = ThisWorkbook.Worksheets("DATA").Range("A65530").End(xlUp).Row + 1
ThisWorkbook.Worksheets("SENET").Range("A1") = TextBox2 ' VELİ ADI
ThisWorkbook.Worksheets("SENET").Range("A2") = TextBox1 ' ÖĞRENCİ ADI
ThisWorkbook.Worksheets("SENET").Range("A3") = TextBox3 ' VELİ CEP TEL
ThisWorkbook.Worksheets("SENET").Range("A4") = TextBox4 ' VELİ EV TEL
ThisWorkbook.Worksheets("SENET").Range("A5") = ComboBox1 ' SINIFI
ThisWorkbook.Worksheets("SENET").Range("A6") = CDbl(Label6) * 1 ' TUTAR
ThisWorkbook.Worksheets("SENET").Range("A7") = CDbl(ComboBox2) * 1 ' TAKSİT ADEDİ
ThisWorkbook.Worksheets("SENET").Range("A8") = CDbl(AYLIK.Caption) * 1 ' TAKSİT TUTARI
'Ocak 2011 - A sütunundan (1.sütun) başlıyor... Ödemeler kayıt tarihinden 1 ay sonra başlayacak...
bugun = VBA.Now
sonrakiay = DateAdd("m", 1, bugun) ' Bugünkü ay'a 1 ekle
hangiay = VBA.Month(sonrakiay)
hangiyil = VBA.Year(sonrakiay)
If hangiay = 12 Then hangiyil = hangiyil + 1
tarihbul = DateSerial(hangiyil, hangiay, 1)
baslangic_bul = Worksheets("SENET").Range("A20:S20").Find(tarihbul).Column
For taksitler = 0 To CDbl(ComboBox2) - 1
ThisWorkbook.Worksheets("SENET").Cells(say, baslangic_bul + taksitler) = CDbl(AYLIK.Caption) * 1
Next taksitler
MsgBox "TAMAM", vbInformation, Application.UserName
End Sub
Bu bilgilerle taksitler aynı satırda yan yana geliyor. Ben A20 den sonrasına senetleri A21,A22,... yazdırabilmem için
say = ThisWorkbook.Worksheets("DATA").Range("A65530").End(xlUp).Row + 1
baslangic_bul = Worksheets("SENET").Range("A20:S20").Find(tarihbul).Column
bu kodlardan hangisinde nereyi değiştirmeliyim ? :-\
-
Tam nasıl bir şey yapmak istediğinizi anlayamadım ama şöyle açıklayayım:
DATA isimli sayfanın A sütunu 65530. satırından yukarıya doğru giderek ilk dolu satırın bulunması ve buna 1 eklenip altındaki boş satırın bulunması kodu:
say = ThisWorkbook.Worksheets("DATA").Range("A65530").End(xlUp).Row + 1
Kısaca; kayıt için yukarıdan aşağı ilk boş satırı buluyoruz.
Aynı şekilde SENET sayfası için de şu şekilde kullanabiliriz:
say = ThisWorkbook.Worksheets("SENET").Range("A65530").End(xlUp).Row + 1
Kayıtları da alt alta göndermek için:
ThisWorkbook.Worksheets("SENET").Range("A" & say) = TextBox2 ' VELİ ADI
ThisWorkbook.Worksheets("SENET").Range("A" & say+1) = TextBox1 ' ÖĞRENCİ ADI
ThisWorkbook.Worksheets("SENET").Range("A" & say+2) = TextBox3 ' VELİ CEP TEL
' ... şeklinde devam edecek...
İlk boş satırı, say değişkenine atayıp, ilgili hücreye veri gönderebiliriz.
Sonraki alanları birer alta yazdırmak için say değişkenine sırayla; 1, 2, 3 vs. ekleriz...
Yani,
Range("A" & say) --> A2 hücresine denk gelirse
Range("A" & say+1) --> A3 hücresine denk gelir
Range("A" & say+2) --> A4 hücresine denk gelir.
-
Bülent Bey gözümün önünde bir yerde ama bulamadım yerini. Bulamadım birde siz bakar mısınız ? :-[
[Forum yazılım güncelleme esnasında sorun oluştuğundan eklendi silinmiştir.]
-
Neyi bulamadınız, anlamadım?
-
Yazdır butonuna tıkladığımda "snt" sayfasına taksitleri alt alta sıralamasını istiyorum. "snt" sayfasından çıktı alıp müşteriye imzalatıp dosyalayacağım.
-
Önceki mesajımda verdiğim şekilde kodları uyarlamayı denediniz mi?
Aynı şekilde snt sayfası için de şu şekilde kullanabiliriz:
say = ThisWorkbook.Worksheets("snt").Range("A65530").End(xlUp).Row + 1
Örneğin B sütunu için Range("A65530") yerine B65530 yazacaksınız.
Kayıtları da alt alta göndermek için:
ThisWorkbook.Worksheets("snt").Range("A" & say) = TextBox2 ' VELİ ADI
ThisWorkbook.Worksheets("snt").Range("A" & say+1) = TextBox1 ' ÖĞRENCİ ADI
ThisWorkbook.Worksheets("snt").Range("A" & say+2) = TextBox3 ' VELİ CEP TEL
' ... şeklinde devam edecek...
İlk boş satırı, say değişkenine atayıp, ilgili hücreye veri gönderebiliriz.
Sonraki alanları birer alta yazdırmak için say değişkenine sırayla; 1, 2, 3 vs. ekleriz...
Yani,
Range("A" & say) --> A2 hücresine denk gelirse
Range("A" & say+1) --> A3 hücresine denk gelir
Range("A" & say+2) --> A4 hücresine denk gelir.
-
Sonunda hallettim Bülent Bey ! :yahooo Excelimde problem vardı sanırım yeni sayfa oluşturarak problemi çözdüm.Akşam çalışmanın son halini yükleyeceğim diğer arkadaşlarında ihtiyacı olabilir.
-
Yapacağınıza şüphem yoktu zaten. :yahooo
İşi çözdünüz. Tebrik ediyorum. :alkis :alkis
-
Bülent Bey öncelikle size , formu bu sayfaya kadar sabırla okuyan yeni/eski arkadaşlara sabır ve ilgilerinden dolayı teşekkür ediyorum. Formda VBA şifresi vardır. Şifre: excelce.net
(Bülent Bey formu kullandıkça ufak tefek düzeltmelere ihtiyaç duyuyorum. Belirlenen fiyata indirim yaptıktan sonra küsürlü toplam fiyat ve/veya küsürlü taksitler çıkıyor. Bunları yukarıya yuvarlamak için kodlarıma ne eklemeliyim ?)
-
Rica ederim Serkan Bey. Sizin azminiz de takdire değer. :alkis
Ben de bunu ne zaman soracaksınız diye merak ediyordum. ;)
Yuvarlama için şu şekilde çözüm bulabilirsiniz:
AYLIK = Round(CDbl(TextBox1), 2)
Kırmızı boyalı 2 değeri, kaç basamak alınacağını, yeşil yazılı Round ise yuvarla fonksiyonunu belirtiyor.
-
:utandim :saygilar
-
Otomatik senet numarası ve DATA sayfasında sınıf bilgilerine göre renklendirme eklenmiş hali !
[Forum yazılım güncelleme esnasında sorun oluştuğundan eklendi silinmiştir.]
-
Arkadaşlar ekte sıkıntımı yazdım. Hücreye elle rakam girince satırları girdiğim sayı kadar dolduruyor. Başka bir hücredeki sayıyı kopyalayınca kafası karışıyor ! :hımm
[Forum yazılım güncelleme esnasında sorun oluştuğundan eklendi silinmiştir.]
-
D3 hücresinde formülü şu şekilde değiştirip aşağı sürükleyin:
=EĞER(EHATALIYSA(EĞER(D2+1<=SAYIYAÇEVİR($E$1);D2+1;""));"";EĞER(D2+1<=SAYIYAÇEVİR($E$1);D2+1;""))
E1 sayı olarak görünmediği için hatalı sonuç verdiğinden dolayı, SAYIYAÇEVİR fonksiyonunu kullandık.
-
Anladım. Hücre özelliklerinden E1 i sayı olarak tanımlamıştım ama olmamıştı.
faturano = faturano + 1
ThisWorkbook.Worksheets("snt").Range("J2") = faturano 'Fatura No
bu sadece 1 artırıyor sonra artırmıyor. Bütün yeni senetlerde senet numarası 1 de kalıyor ?!
-
Kendim sordum kendim cevaplıyorum kusura bakmayın :-[
Sheets("snt").[J2] = Sheets("snt").[J2] + 1
ile sorunu çözdüm.