Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 'Aşağıdaki örnek Workbook_SheetChange event'ini kullanarak aşağıdaki işlemleri yapar
- '1. formül girerken sizi her defasında '=' yazmaktan kurtarır. 5+5 yazdığınızda =5+5 şekline çevirir
- '2. eğer soldaki hücrede #Kasa!3Ödemeler gibi bir kod var ise Kasa sayfasının tüm 1. satırında 'Ödemeler' kelimesini arar ve bulduğunda 3 kolonunda bulunduğunuz sayfanın ismini arar, bulduğunda sağındaki hücreye girdiğiniz veriyi yazar.
- 'Örnek: 'otomobil' isimli bir sayfada 'masraf#Kasa!3Ödemeler' hücresinin sağına 1000 yazdık. Aşağıdaki kod 'Kasa' sayfasında 'Ödemeler' kolonunundan sonra 3. kolonda 'otomobil' satırının arar ve bulunca sağına 1000 yazar :)
- Private Sub Workbook_SheetChange(ByVal SAYFA As Object, ByVal HUCRE As Range)
- If HUCRE.Cells.Count > 100 Then Exit Sub
- If SheetChangeKontrol = 1 Then SheetChangeKontrol = 0: Exit Sub 'gereksiz Workbook_SheetChange çağrılarının önüne geçmek için
- If HUCRE.HasFormula = False Then 'eğer değişen hücredeki veri bir formül değilse formül olabiliyor mu bak
- If IsNumeric(Evaluate(HUCRE.Value)) = True Then 'hücre verisi bir formül olarak çalıştırıldığında çıkan sonuç bir sayı mı
- SheetChangeKontrol = 1 'Değer değişikliğinden önce bunu 1 yaparak değer değişikliği sırasında Workbook_SheetChange tekrar çağrılacağı için işlem yapmadan çıkılmasını sağlıyoruz
- HUCRE.Formula = "=" + HUCRE.Formula 'eğer bir sayı ise değişen hücredeki verinin başına = koy
- End If
- End If
- If HUCRE.Column = 1 Then Exit Sub 'değişen hücre eğer 1. kolondaysa solunda bir adres hücresi olamayacağı için yordamdan çık işlem yapma
- ReferansHucre = HUCRE.Offset(0, -1) 'değişen hücrenin sol tarafındaki adres bilgisinin olduğu hücrenin içeriğini al
- If InStr(1, ReferansHucre, "#") > 0 Then
- HedefBirim = Mid(ReferansHucre, InStr(1, ReferansHucre, "#") + 1, (InStr(1, ReferansHucre, "!") - InStr(1, ReferansHucre, "#") - 1)) 'değişecek olan hücrenin bulunduğu sayfanın adı
- 'Adres olarak direk hücre adresi verilmiş mi?
- If InStr(1, ReferansHucre, "!'") Then
- Set HedefHucre = Sheets(HedefBirim).Range(Mid(ReferansHucre, InStr(1, ReferansHucre, "!'") + 2)) 'Eğer verilmiş ise verilen hücreyi HedefHucre'ye bağla
- Else 'Hücre adresi belirtilmemiş ise o zaman Hedef Hücre adresini kendimiz bulmamız gerekiyor
- Urun = Mid(ReferansHucre, InStr(1, ReferansHucre, "!") + 2) 'değişecek olan hücre hangi ürün bloğunda
- Kolon = Mid(ReferansHucre, InStr(1, ReferansHucre, "!") + 1, 1) 'değişen hücrenin sayfa ismi ürün bloğunun hangi kolonunda aranacak
- 'Hedef adresi bulmak için önce hedef birimin sayfasında ürün isimleri içinde ürünü ara sonra ürünü bulunca ilgili KOLON'un sol tarafında değişen hücrenin bulunduğu sayfanın(birimin) ismini ara
- On Error Resume Next
- HedefKolon = Columns(Sheets(HedefBirim).Range("1:1").Find(What:=Urun, LookAt:=xlWhole).Column + Kolon - 1).Address
- Set HedefHucre = Sheets(HedefBirim).Range(HedefKolon).Find(SAYFA.Name, LookAt:=xlPart).Offset(, 1)
- Hata = Err
- On Error GoTo 0
- If Hata <> 0 Then MsgBox ("ÜRÜN veya BİRİM bulunamadı!"): Exit Sub 'Eğer arama sonucu hedef hücre bulunamamışsa değer boş olacağı için hata ver çık
- End If
- 'Eğer Hedef Hücrenin içeriği değiştirmek istediğimiz veri ile aynı ise işlem yapma
- 'Bu kontrolü yapmak gerekiyor çünkü her değiştirmede Workbook_SheetChange tekrar çağrılıyor ve fonksiyon sonsuz döngüye giriyor
- If HedefHucre.Formula <> HUCRE.Formula Then HedefHucre.Formula = HUCRE.Formula
- End Sub
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement