• DİKKAT

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

Sayfa numarasına göre "İçindekiler" güncellemesi

Katılım
12 Ekim 2017
Mesajlar
123
Excel Vers. ve Dili
2011
Merhaba,

Ekte göreceğiniz Excel'i PDF'e aktarıyorum ve o şekilde baskısını alıyorum.

Bu güne kadar sayfa numaralarını elle otomatik olarak giriyordum (ekle kısmından sayfa numarası ekleyip, CTRL + P'ye bastığımda çıkan sayfa numaralarına göre).

Örneğin; ekteki örnekteki B5, B7, B9 vb. hangi sayfaya denk gelmişse sağ tarafındaki L5, L7, L9 vb. hücrelerine sayfa numarasını yazıyordum. Bunu otomatik olarak yapmanın bir yolu var mıdır?

Saygılar
 

Ekli dosyalar

Son düzenleme:
. . .

Not: Yazdırma alanı belirlenmiş olmalı.

Kod:
Sub kod()
    Dim DikeySay As Integer, YataySay As Integer, SayfaNo As Integer
    Dim Dikey As VPageBreak, Yatay As HPageBreak

    If ActiveSheet.PageSetup.PrintArea = "" Then
        MsgBox "Yazdırma Alanı Belirlenmemiş", vbCritical
        Exit Sub
    End If
    
    Range("L:L").ClearContents
    
[COLOR="darkred"]    ActiveWindow.View = xlPageBreakPreview[/COLOR]
    
    For i = 5 To Cells(50, "B").End(3).Row

        If Cells(i, "B") <> "" Then

            For a = 50 To Cells(Rows.Count, "B").End(3).Row
                If Cells(i, "B") = Cells(a, "B") Then
                    sat = Cells(a, "B").Row
                    süt = Cells(a, "B").Column

                    If ActiveSheet.PageSetup.Order = xlDownThenOver Then
                        YataySay = ActiveSheet.HPageBreaks.Count + 1
                        DikeySay = 1
                    Else
                        DikeySay = ActiveSheet.VPageBreaks.Count + 1
                        YataySay = 1
                    End If
                    SayfaNo = 1
                    For Each Dikey In ActiveSheet.VPageBreaks
                        If Dikey.Location.Column > süt Then Exit For
                        SayfaNo = SayfaNo + YataySay
                    Next Dikey
                    For Each Yatay In ActiveSheet.HPageBreaks
                        If Yatay.Location.Row > sat Then Exit For
                        SayfaNo = SayfaNo + DikeySay
                    Next Yatay

                    Cells(i, "L") = SayfaNo

                    Exit For


                End If
            Next a


        End If
    Next i
 [COLOR="DarkRed"]   ActiveWindow.View = xlNormalView[/COLOR]
    
End Sub

Ekran Görüntüsü:


.
 
Son düzenleme:
Merhaba, birkaç satır eklediğimde göndermiş olduğunuz formülün yanlış sonuç verdiğini gördüm. Ki bu durum gayet olası bir şey. Dosyanın hatayla karşılaştığım hali ektedir.
 

Ekli dosyalar

Son düzenleme:
.

Gönderdiğiniz örnekte sayfa no olarak 2 yazıyor,
hiç bir değişiklik yapmadan kodları çalıştırıyorum. Doğru sonuçlar alıyorum.
Hatalı hesapladığı kısım neresi?

Not: İletilerinizde gereksiz alıntı yapmayın. Üst mesajlarınızdaki alıntıları düzeltmenizi rica ederim.

.
 
.

# 4 nolu mesajımdaki kodlara kırmızı ile belirttiğim 2 satırı ile ettim. Bu şekilde de deneyiniz.

.
 
.

# 4 nolu mesajımdaki kodlara kırmızı ile belirttiğim 2 satırı ile ettim. Bu şekilde de deneyiniz.

.

Teşekkürler Emir Hüseyin Çoban! Sorunsuz bir şekilde çalışıyor. Peki eğer ben bu yazmış olduğunuz kodu aşağıdaki gibi bir sayfada çalıştırmak isteseydim;

Sayfanın adı: Rapor
İçindekiler kısmı: D123:D251 arası (= ile başka hücrelerden çekiliyor, hücreler A sütununda, 2000'inci satıra kadar)
Sayfa numaraları kısmı: R123:R251 arası


Bunun için revize edilmesi gerekseydi formülde neler değişirdi? Bunu sorma sebebim nasıl revize edebileceğimi anlamak ve başka bir uyarlama için sizi rahatsız etmemek.

Bir de belki de konunun sınırlarını fazlasıyla aşarak bir şey sormak istiyorum (mümkün müdür bilmiyorum)

Sizin yazmış olduğunuz şekilde sayfa numaraları hatasız geliyor. Buına ilaveten; İçindekiler kısmındaki veriler aşağıdaki ilgili hücrelerden geliyor. Eğer aşağıdaki ilgili hücre gizlenmişse içindekiler kısmında da o satırın komple gizlenmesini sağlamak mümkün müdür? Eğer mümkünse yukarıda kırmızı renkle yazmış olduğum örnek için nasıl oluşturulur? Umarım bu soru sizin Excel ilgi alanınızın çok dışında değildir.

En derin saygılarımla
 
.....
Sayfanın adı: Rapor
İçindekiler kısmı: D123:D251 arası (= ile başka hücrelerden çekiliyor, hücreler A sütununda, 2000'inci satıra kadar)
Sayfa numaraları kısmı: R123:R251 arası
......
Eğer aşağıdaki ilgili hücre gizlenmişse içindekiler kısmında da o satırın komple gizlenmesini sağlamak mümkün müdür?
.....
.

Kırmızı ile belirttiğim alanlara tanımlamaları girebilirsiniz...

Kod:
Sub kod()
    Dim DikeySay As Integer, YataySay As Integer, SayfaNo As Integer
    Dim Dikey As VPageBreak, Yatay As HPageBreak

    If ActiveSheet.PageSetup.PrintArea = "" Then
        MsgBox "Yazdırma Alanı Belirlenmemiş", vbCritical
        Exit Sub
    End If
    
[COLOR="DarkRed"]    içindekiler_başlangıç = 123
    içindekiler_bitiş = 251
    içindekier_başlıklar = "D"
    sayfa_no_sütunu = "R"
        
    sayfalar_başlangıç = 252
    sayfa_başlıklar = "A"[/COLOR]
    
    Rows(içindekiler_başlangıç & ":" & içindekiler_bitiş).EntireRow.Hidden = False
[COLOR="Blue"]    Range(Cells(123, sayfa_no_sütunu), Cells(içindekiler_bitiş, sayfa_no_sütunu)).ClearContents[/COLOR]
    
    ActiveWindow.View = xlPageBreakPreview
    
    
    For i = içindekiler_başlangıç To Cells(içindekiler_bitiş, içindekier_başlıklar).End(3).Row

        If Cells(i, içindekier_başlıklar) <> "" Then

            For a = sayfalar_başlangıç To Cells(Rows.Count, sayfa_başlıklar).End(3).Row
                If Cells(i, içindekier_başlıklar) = Cells(a, sayfa_başlıklar) Then
                    
                If Rows(a).EntireRow.Hidden = True Then Rows(i).EntireRow.Hidden = True
                    
                    sat = Cells(a, sayfa_başlıklar).Row
                    süt = Cells(a, sayfa_başlıklar).Column

                    If ActiveSheet.PageSetup.Order = xlDownThenOver Then
                        YataySay = ActiveSheet.HPageBreaks.Count + 1
                        DikeySay = 1
                    Else
                        DikeySay = ActiveSheet.VPageBreaks.Count + 1
                        YataySay = 1
                    End If
                    SayfaNo = 1
                    For Each Dikey In ActiveSheet.VPageBreaks
                        If Dikey.Location.Column > süt Then Exit For
                        SayfaNo = SayfaNo + YataySay
                    Next Dikey
                    For Each Yatay In ActiveSheet.HPageBreaks
                        If Yatay.Location.Row > sat Then Exit For
                        SayfaNo = SayfaNo + DikeySay
                    Next Yatay

                    Cells(i, sayfa_no_sütunu) = SayfaNo

                    Exit For

                End If
            Next a


        End If
    Next i
    ActiveWindow.View = xlNormalView
    MsgBox "B i t t i "
End Sub

.
 
Son düzenleme:
Değerli Emir Bey, ekteki görsellerdeki hatayı alıyor olmam bir şeyi yanlış yapmış olduğumun göstergesi midir? İlk 2 görselde vermiş olduğunuz kodu sayfanın kod bölümüne ekledim, 400 hatası verdi. 3. görselde ise module'e ekledim ve Run-time error: '1004' Debug hatası verdi. Bir göz atabilir misiniz? Saygılar
 

Ekli dosyalar

  • İçindekiler_hata.jpg
    İçindekiler_hata.jpg
    20.8 KB · Görüntüleme: 3
  • İçindekiler_hata2.jpg
    İçindekiler_hata2.jpg
    21.2 KB · Görüntüleme: 2
  • İçindekiler_hata3.jpg
    İçindekiler_hata3.jpg
    20.4 KB · Görüntüleme: 2
Son düzenleme:
. . .

Mesajlarınızdaki gereksiz alıntıları silmenizi tekrar rica ederim. İletilerin okunaklığını azaltıyor.

Kodları modüle eklemeniz gerekiyor.
1004 hata kodunun anlamı. Sayfa korumasıyla kilitki alanda işlem yapmaya çalıştığımızı belirtir.
Sayfa korumasını açarak kodları çalıştırmayı deneyin.

.
 
Evet modül olarak ekledim. Yazdığınızı da inceledim fakat dosyada bir koruma olmadığını gördüm. Hata kodunda ise şöyle yazıyor.

"Run-time error '1004':
Ne yazık ki, bu işlemi birleştirilmiş bir hücrede yapamıyoruz."

Fakat baktığımda sayfa numaralarının olduğu kısım birleştirilmiş değil. Birleştirilmiş olan tek kısım içeriği yazdığı ve verilerin çekildiği kısım. Kodun çalışmasına engel olan şey bu mudur acaba?

Saygılar

Not: gereksiz alıntılar silinmiştir.
 

Ekli dosyalar

  • İçindekiler_hata4.jpg
    İçindekiler_hata4.jpg
    19.6 KB · Görüntüleme: 4
  • İçindekiler_hata5.jpg
    İçindekiler_hata5.jpg
    20 KB · Görüntüleme: 4
Son düzenleme:
.

# 9 nolu mesajımda
kodlarda mavi ile belirttiğim satırda değişiklik yaptım.
Deneyiniz.

.
 
Emir Bey iyi akşamlar,

Yapmış olduğunuz düzeltmeyle kodu çalıştırdığımda hata vermedi. D sütununda olan kısım hangi hücreden çekiyorsa onun olduğu kısmın bulunduğu sayfa numarası R sütununa geliyor, buraya kadar her şey süper.

Eğer hücrenin çekildiği kısımda hiçbir şey yazmıyorsa sayfa numarası 7 olarak geliyor.

Eğer verinin çekildiği satırı komple silersem (#BAŞV! çıktığı içindir sanırım) Run-time error '13': Type mismatch hatası alıyorum.

Fakat #8 numaralı postta belirttiğim gibi benim asıl ihtiyacım olan verinin çekildiği satır gizlendiği (veya silindiği) zaman içindekiler kısmındaki ilgili satırın da gizlenmesi (veya silinmesi). O postta belirttiğim gibi burada da tekrar sorayım, bu rica ettiğim şeyi Excel'de yapmak mümkün müdür?

Saygılar
 
.

Gizleme kısmını yaptım.
Silmeyle ilgili birşey okumamıştım. Satırı silersek daha önce girilen satır tanımlamaları kayar..
O yüzden o satırıda gizleyelim.

Hücrede boş ve hatalı değer olması durumu için yeni kontroller ekleyeceğim.

.
 
.

Hücrede sıfır veya hata kodu varsa, bu ilgili satırın boş olduğu veya silindiği anlamına geliyor.
İçindekiler de direk bu satırı gizlememiz yeterli olacak sanırım.
Kurduğum mantık doğru mu, gözden kaçırdığım farklı bir durum var mı.

.
 
İyi akşamlar Emir Bey,

Evet, eğer o satır boş veya silinmişse, gizlendiğinde yaptığımız gibi, gizlememiz yeterli olacaktır.

Saygılar
 
Geri
Üst