• DİKKAT

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

Gecikmeye Göre Sıralama

  • Konbuyu başlatan Konbuyu başlatan crion
  • Başlangıç tarihi Başlangıç tarihi
Katılım
20 Ekim 2011
Mesajlar
60
Excel Vers. ve Dili
Excel 2010
Herkese iyi günler, benim de ufak bir sorunum var bana yardımcı olursanız memnun olurum.

Visual Basic'te Excel'de çalışan bir basit bir sigorta ekspertiz iş takip programı oluşturdum, programda her hasar durumu için excel'de kişi ve hasar bilgilerini içeren özel bir satır oluşturuyorum, sorunum gecikme gün sayısı hesaplanmasında:

Gecikmeyi hesaplayacak ve kullanıcı ekranında büyükten küçüğe dosyaları sıralı bir biçimde gösterecek bir makro oluşturdum, bunun hasar bilgilerini programın başlangıçta, her yeni hasar oluşturduğumda ve hasar dosyası düzenlediğimde çalışmasını istiyorum. Ancak makro ne başlangıçta, ne de Call ile program içinde çağırdığımda çalışıyor. İnceleyebilmeniz için program ektedir, Sub Auto_Open() içindeki makro da aşağıdadır. Yardımlarınız için şimdiden teşekkürler, iyi çalışmalar dilerim.

Kod:
Sub Auto_Open()
'On Error Resume Next            
'Gecikme hesabı, U1deki tanımlı EĞER durumuna göre son değere kadar Fill yapılacak
Sheets("veri").Select    
    Selection.AutoFill Destination:=Range("U1:U"), Type:=xlFillDefault
    Range("U1:U").Select
    Selection.AutoFilter
    With ActiveWorkbook.Worksheets("veri").AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

Application.Visible = False             'Excel'in gizlenmesi
UserForm1.Show                          'Kullanıcı ekranının gelmesi
End Sub
 

Ekli dosyalar

hoş geldiniz.

application.visible ifadesini görünce dosyayı indirmeye teşebbüs dahi etmedim.
çünkü makroları devre dışı bırakmak, dosyayı açmak, ilgili bütün kodları gözden geçirmek, bu gibi ifadeleri silmek, tekrar makro ayarları ile uğraşmak bir ton iş.

önerim paylaşım ortamlarına dosya yüklerken bu dosyayı açacak kişilerin kendi çalışmalarını etkileyecek kodların başına (') koymanızdır.

özet olarak dosyayı görmek lazım ama yukarıdaki kodlara bakınca
Range("U1:U") ifadesi hangi Range'i tanımlamaktadır.
 
Program içeriği aslında gayet basit, arabirim bir doldurulacak bir form, birkaç buton (kaydet, düzenle, yeni, çıkış, vs.) ve Excel'de birkaç hücreden veri alan birkaç textbox'tan oluşmakta. U sütununda gecikme gün sayısı tutulmakta, basit bir hesap olan gecikme ise şu mantıkta hesaplanmalı:

EĞER Rapor Teslim Tarihi = 0 ise (Rapor teslim edilmemiş ise, hücre boşsa)
Gecikme = BUGÜN() - İhbar Tarihi (G sütunu)

Son olarak da her bir satırda gecikme hesaplandıktan sonra filtrede büyükten küçüğe sıralanmalı. Böylece kullanıcı arabirimindeki listbox'ta liste en çok gecikenden en az gecikene doğru sıralanmış olacak.

Bunu kod ile yapmak istedim istediğim gibi olmadı, ben de makro olarak yapmaya karar verdim. Makro doğru görünüyor, ama çalışmıyor. Makronun yaptığı şu: Veri sayfasını açıyor, U1 sütununu seçip (U1 hücresi yukarıdaki EĞER'i içeriyor) veri içeren son satıra kadar aradaki hücreleri sırayla fill yapıyor (yani U'daki her hücre için gecikmeyi tekrar hesaplıyor) Range("U1:U") ile anlatmaya çalıştığım bu idi ama sanırım tam da dediğim gibi olmuyor :)
 
şöyle bir deneme yapınca ne oluyor.

Kod:
Sub deneme
Range("[COLOR="Red"]U1:U[/COLOR]").Select
End Sub
 
o şekilde deneyince range için 1004 hatası veriyor.
 
elbette.
Range'in ne olduğunu anlayamıyor.

dolayısı ile kodun içinde bulunan
Kod:
    Selection.AutoFill Destination:=Range("U1:U"), Type:=xlFillDefault
    Range("U1:U").Select

satırlarında da hata verir.
daha önceki satırlarda On Error Resume Next, On Error Goto xxx: vb hata bastıran bir ifade var ise, hata veren satırlarda işlem yapmadan devam eder.

dolayısı ile buradaki range ifadesini doğru yazmamız lazım.
Kod:
Range("U1:U[COLOR="Red"]15[/COLOR]")
veya değişken ise...
Kod:
Range("U1:U[COLOR="Red"]" & sonsat[/COLOR]")

bu düzeltmeye rağmen hata devam ediyorsa tekrar bakılır...
 
veya değişken ise...
Kod:
Range("U1:U[COLOR="Red"]" & sonsat[/COLOR]")

bu düzeltmeye rağmen hata devam ediyorsa tekrar bakılır...

programda şu hale getirdim ancak TextBox17.Value dan hemen sonra ") kısmında iki satırda da aşağıdaki hatayı veriyor:

Kod:
Selection.AutoFill Destination:=Range("U1:U" & TextBox17.Value"), Type:=xlFillDefault
    Range("U1:U" & TextBox17.Value").Select

Compile error:

Expected: list separator or )
 
Kod:
Selection.AutoFill Destination:=Range("U1:U" & TextBox17.Value), Type:=xlFillDefault

Parantez kapamadan önceki tırnağı kaldırınca o hata düzeliyor bu sefer de
Object Required hatası veriyor.
 
değişkenden sonra gelen " için özür.
kopyala yapıştır kolaycılığında oluyor maalesef.

U sütununu =EĞER(L2=0;BUGÜN()-G2;0) formülü ile doldurmak ve bu sütuna göre büyükten küçüğe sıralamak amaç ise aşağıdaki yeterli olur.

yalnız istatistik B3 formülünün sonundaki "-1"i silmezseniz 1 satır eksik dikkate alır.

formülleri yazarken operatör ve ayraçların öncesinde ve sonrasında bir boşluk " " bırakıyorsunuzz. bu hatalı. bitişik yazın.
VBA ingilizce çalışır. formüller ingilizce, ayraçlar da ";" yerine "," olmalıdır.

Kod:
Sub Auto_Open()

Sheets("veri").Select                   'Gecikme hesabı, U1deki tanımlı EĞER durumuna göre Fill yapılacak
Range("U2:U" & Sheets("istatistik").Range("B3").Value).Formula = "=If(L2=0,Today()-G2,0)"
Range("B1:X" & Sheets("istatistik").Range("B3").Value).Sort Key1:=Range("U2"), Order1:=xlDescending, Header:=xlYes
Range("B1").Select

End Sub
 
tavsiyeleriniz ve yardımınız için teşekkürler, tam istediğim gibi çalışıyor :)
 
rica ederim. kolay gelsin.
 
Kusura bakmayın tam istediğim gibi çalışıyor derken şimdi de makro manuel çalışınca doğru çalışıyor, ancak şimdi de makro başlangıçta çalışmıyor, bir sorun mu var acaba?

Kod:
Sub Auto_Open()

Sheets("veri").Select   'U1deki tanımlı EĞER durumuna göre Fill yapılacak
Range("U2:U" & Sheets("istatistik").Range("B3").Value).Formula = "=If(L2=0,Today()-G2,0)"
Range("B1:X" & Sheets("istatistik").Range("B3").Value).Sort Key1:=Range("U2"), Order1:=xlDescending, Header:=xlYes
Range("B1").Select

Application.Visible = False             
UserForm1.Show                         
End Sub
 
dosyanıza tekrar baktım.

standart modülde Auto_Open makrosu varken, tamamı olmasa da benzer kodları ThisWorkbook kod modülündeki Workbook_Open olay koduna da yazmışsınız.

Excel 1997'den itibaren Workbook_Open kullanmak lazım zaten. doğrusu bu. Auto_Open eski uygulamalardan miras kalan ve devam eden bir uygulama. (zamanında aralarında ne fark var diye araştırmıştım.)

Auto_Open ve Auto_Close makrolarını silin.

Buradaki kodları Workbook_Open ve Workbook_BeforeClose olay kodlarına taşıyın.

ben ilk yazdığım kodları her iki formatta da denedim.
sorunsuz çalıştı.
 
teşekkürler, sorunsuz çalışıyor.
 
Geri
Üst