Makro ile sayfa buldurmak

muratgunay48

Altın Üye
Katılım
10 Şubat 2010
Mesajlar
1,059
Excel Vers. ve Dili
Office 365 - Türkçe (64 bit)
Altın Üyelik Bitiş Tarihi
31-01-2025
Arkadaşlar merhaba, şöyle bir sorum olacak; ben sayfaları çoğalttım ancak sayfa ara makrosu yapmak istiyorum. Ama şöyle bir şey var -mesela sayfanın adı MURAT ben MURAT adlı sayfayı arayacağım (dosyamda 1000 sayfa var) ben MUR yazsam bile MURAT , MURATA , MURTAR , MURDAR , MURKAN , MURKEL adlı sayfaları listelesin. Böyle bir şey mümkün olabilir mi? Yardımcı olursanız sevinirim. Şimdiden teşekkür ederim.
Saygılarımla.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
41,454
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Deneyiniz.

C++:
Option Explicit

Sub Sayfa_Adi_Bul()
    Dim Sayfa As Worksheet, Aranan_Sayfa_Adi As Variant, Say As Integer
    
    Aranan_Sayfa_Adi = InputBox("Aradığınız sayfa adını giriniz...", "Aranan Sayfa Adı")
    
    If Aranan_Sayfa_Adi = "" Or Aranan_Sayfa_Adi = False Then
        MsgBox "İşleme devam edebilmeniz için lütfen aradığınız sayfa adını giriniz!", vbCritical
        Exit Sub
    End If
    
    Application.DisplayAlerts = False
    On Error Resume Next
    Sheets("Bulunan Sayfa Listesi").Delete
    On Error GoTo 0
    Application.DisplayAlerts = True
    
    ReDim Liste(1 To ThisWorkbook.Worksheets.Count, 1 To 1)
    
    For Each Sayfa In ThisWorkbook.Worksheets
        If UCase(Replace(Replace(Left(Sayfa.Name, Len(Aranan_Sayfa_Adi)), "ı", "I"), "i", "İ")) = _
            UCase(Replace(Replace(Aranan_Sayfa_Adi, "ı", "I"), "i", "İ")) Then
            Say = Say + 1
            Liste(Say, 1) = Sayfa.Name
        End If
    Next
    
    If Say > 0 Then
        Sheets.Add
        ActiveSheet.Name = "Bulunan Sayfa Listesi"
        Range("A1") = "Sayfalar"
        Range("A1").Font.Bold = True
        Range("A2").Resize(Say, 1) = Liste
        MsgBox "Bulunan sayfalar listelenmiştir.", vbInformation
    Else
        MsgBox "Aradığınız sayfa bulunamadı!", vbCritical
    End If
End Sub
 

muratgunay48

Altın Üye
Katılım
10 Şubat 2010
Mesajlar
1,059
Excel Vers. ve Dili
Office 365 - Türkçe (64 bit)
Altın Üyelik Bitiş Tarihi
31-01-2025
Deneyiniz.

C++:
Option Explicit

Sub Sayfa_Adi_Bul()
    Dim Sayfa As Worksheet, Aranan_Sayfa_Adi As Variant, Say As Integer
   
    Aranan_Sayfa_Adi = InputBox("Aradığınız sayfa adını giriniz...", "Aranan Sayfa Adı")
   
    If Aranan_Sayfa_Adi = "" Or Aranan_Sayfa_Adi = False Then
        MsgBox "İşleme devam edebilmeniz için lütfen aradığınız sayfa adını giriniz!", vbCritical
        Exit Sub
    End If
   
    Application.DisplayAlerts = False
    On Error Resume Next
    Sheets("Bulunan Sayfa Listesi").Delete
    On Error GoTo 0
    Application.DisplayAlerts = True
   
    ReDim Liste(1 To ThisWorkbook.Worksheets.Count, 1 To 1)
   
    For Each Sayfa In ThisWorkbook.Worksheets
        If UCase(Replace(Replace(Left(Sayfa.Name, Len(Aranan_Sayfa_Adi)), "ı", "I"), "i", "İ")) = _
            UCase(Replace(Replace(Aranan_Sayfa_Adi, "ı", "I"), "i", "İ")) Then
            Say = Say + 1
            Liste(Say, 1) = Sayfa.Name
        End If
    Next
   
    If Say > 0 Then
        Sheets.Add
        ActiveSheet.Name = "Bulunan Sayfa Listesi"
        Range("A1") = "Sayfalar"
        Range("A1").Font.Bold = True
        Range("A2").Resize(Say, 1) = Liste
        MsgBox "Bulunan sayfalar listelenmiştir.", vbInformation
    Else
        MsgBox "Aradığınız sayfa bulunamadı!", vbCritical
    End If
End Sub
Hocam emeğinize sağlık. Çok teşekkür ederim. Ancak listelemeyi "bulunan sayfalar listesi" diye ayrı sayfa açmak yerine, benim bilgilerin bulunduğu ve butonu koyduğum "ANA SAYFA" da gösterse. Bir de bu çok olur diyeceksiniz ama, mesela listelemeyi yaptı ABALI, ABACI, ABATA.... onların hücreleri linkli olsa ve o sayfaya gitse, bu mümkün mü.
Saygılarımla.
 

muratgunay48

Altın Üye
Katılım
10 Şubat 2010
Mesajlar
1,059
Excel Vers. ve Dili
Office 365 - Türkçe (64 bit)
Altın Üyelik Bitiş Tarihi
31-01-2025
@Korhan Ayhan hocam, add yazısını görünce anladım. yaptım. Şimdi listeyi istediğim sayfada listeliyor. Listeyi link ile beraber açması mümkün mü. Mesela 40 tane sayfa listeledi. O isme tıklayınca o sayfaya gitse. Mümkünse tabi.
Saygılarımla.
 

muratgunay48

Altın Üye
Katılım
10 Şubat 2010
Mesajlar
1,059
Excel Vers. ve Dili
Office 365 - Türkçe (64 bit)
Altın Üyelik Bitiş Tarihi
31-01-2025
Hocam, kayıt sil diye bir kod ekledim ama. Silip "ANA SAYFA" ya gitmesi lazım. Sürekli hata veriyor.
Hata nerede acaba. Size zahmet bakabilir misiniz.
 

Ekli dosyalar

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
41,454
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Aranan sayfalara link ekleyen kod;

C++:
Option Explicit

Sub Sayfa_Adi_Bul()
    Dim S1 As Worksheet, Sayfa As Worksheet, Aranan_Sayfa_Adi As Variant, Say As Integer, Veri As Range
    
    Aranan_Sayfa_Adi = InputBox("Aradığınız sayfa adını giriniz...", "Aranan Sayfa Adı")
    
    If Aranan_Sayfa_Adi = "" Or Aranan_Sayfa_Adi = False Then
        MsgBox "İşleme devam edebilmeniz için lütfen aradığınız sayfa adını giriniz!", vbCritical
        Exit Sub
    End If
    
    Set S1 = Sheets("ANA SAYFA")
    S1.Range("A2:A" & S1.Rows.Count).ClearContents
    
    
    ReDim Liste(1 To ThisWorkbook.Worksheets.Count, 1 To 1)
    
    For Each Sayfa In ThisWorkbook.Worksheets
        If Sayfa.Name <> S1.Name Then
            If UCase(Replace(Replace(Left(Sayfa.Name, Len(Aranan_Sayfa_Adi)), "ı", "I"), "i", "İ")) = _
                UCase(Replace(Replace(Aranan_Sayfa_Adi, "ı", "I"), "i", "İ")) Then
                Say = Say + 1
                Liste(Say, 1) = Sayfa.Name
            End If
        End If
    Next
    
    If Say > 0 Then
        With S1
            .Range("A1") = "Sayfalar"
            .Range("A1").Font.Bold = True
            .Range("A2").Resize(Say, 1) = Liste
            .Range("A2:A" & .Rows.Count).Sort Key1:=.Range("A2"), Order1:=xlAscending
            For Each Veri In .Range("A2").Resize(Say, 1)
                Veri.Hyperlinks.Add Anchor:=Veri, Address:="", SubAddress:="'" & Veri.Value & "'!A1", TextToDisplay:=Veri.Value
            Next
        End With
        MsgBox "Bulunan sayfalar listelenmiştir.", vbInformation
    Else
        MsgBox "Aradığınız sayfa bulunamadı!", vbCritical
    End If
End Sub
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
41,454
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Silme işlemi için deneme yaptım bende hata vermedi.

Ayrıca kodu dolandırmaya gerek yok. Aşağıdaki gibi aktif sayfayı silebilirsiniz.

C++:
Option Explicit

Sub Aktif_Sayfayi_Sil()
    Application.DisplayAlerts = False
    ActiveSheet.Delete
    Application.DisplayAlerts = True
End Sub
 

muratgunay48

Altın Üye
Katılım
10 Şubat 2010
Mesajlar
1,059
Excel Vers. ve Dili
Office 365 - Türkçe (64 bit)
Altın Üyelik Bitiş Tarihi
31-01-2025
Aranan sayfalara link ekleyen kod;

C++:
Option Explicit

Sub Sayfa_Adi_Bul()
    Dim S1 As Worksheet, Sayfa As Worksheet, Aranan_Sayfa_Adi As Variant, Say As Integer, Veri As Range
   
    Aranan_Sayfa_Adi = InputBox("Aradığınız sayfa adını giriniz...", "Aranan Sayfa Adı")
   
    If Aranan_Sayfa_Adi = "" Or Aranan_Sayfa_Adi = False Then
        MsgBox "İşleme devam edebilmeniz için lütfen aradığınız sayfa adını giriniz!", vbCritical
        Exit Sub
    End If
   
    Set S1 = Sheets("ANA SAYFA")
    S1.Range("A2:A" & S1.Rows.Count).ClearContents
   
   
    ReDim Liste(1 To ThisWorkbook.Worksheets.Count, 1 To 1)
   
    For Each Sayfa In ThisWorkbook.Worksheets
        If Sayfa.Name <> S1.Name Then
            If UCase(Replace(Replace(Left(Sayfa.Name, Len(Aranan_Sayfa_Adi)), "ı", "I"), "i", "İ")) = _
                UCase(Replace(Replace(Aranan_Sayfa_Adi, "ı", "I"), "i", "İ")) Then
                Say = Say + 1
                Liste(Say, 1) = Sayfa.Name
            End If
        End If
    Next
   
    If Say > 0 Then
        With S1
            .Range("A1") = "Sayfalar"
            .Range("A1").Font.Bold = True
            .Range("A2").Resize(Say, 1) = Liste
            .Range("A2:A" & .Rows.Count).Sort Key1:=.Range("A2"), Order1:=xlAscending
            For Each Veri In .Range("A2").Resize(Say, 1)
                Veri.Hyperlinks.Add Anchor:=Veri, Address:="", SubAddress:="'" & Veri.Value & "'!A1", TextToDisplay:=Veri.Value
            Next
        End With
        MsgBox "Bulunan sayfalar listelenmiştir.", vbInformation
    Else
        MsgBox "Aradığınız sayfa bulunamadı!", vbCritical
    End If
End Sub
Hocam, mükemmel ötesi. elinize emeğinize sağlık. Çok teşekkür ederim.
 

muratgunay48

Altın Üye
Katılım
10 Şubat 2010
Mesajlar
1,059
Excel Vers. ve Dili
Office 365 - Türkçe (64 bit)
Altın Üyelik Bitiş Tarihi
31-01-2025
Silme işlemi için deneme yaptım bende hata vermedi.

Ayrıca kodu dolandırmaya gerek yok. Aşağıdaki gibi aktif sayfayı silebilirsiniz.

C++:
Option Explicit

Sub Aktif_Sayfayi_Sil()
    Application.DisplayAlerts = False
    ActiveSheet.Delete
    Application.DisplayAlerts = True
End Sub
Hocam, bunda bir hata vermedi. Bendeki kodda da hata vermiyordu. Sildikten sonra "ANA SAYFA" ya git için Sheets("ANA SAYFA").Select ekleyince hata veriyor. Sizde hata vermemiştir, zira 3. 4. 5. sayfa silmede hata veriyor.
Sizin yazdığınız koda sildikten sonra "ANA SAYFA" git komutu eklemek mümkün mü. Son satıra Sheets("ANA SAYFA").Select ekledim. 5-6 sayfa sildim hata vermedi ama. Bu bir sıkıntı yok anlamına geliyor sanırım.
Yine de çok teşekkür ederim.
 
Son düzenleme:

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
41,454
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Deneyiniz.

C++:
Option Explicit

Sub Aktif_Sayfayi_Sil()
    Application.DisplayAlerts = False
    ActiveSheet.Delete
    Application.DisplayAlerts = True
    Sheets("ANA SAYFA").Select
End Sub
 

muratgunay48

Altın Üye
Katılım
10 Şubat 2010
Mesajlar
1,059
Excel Vers. ve Dili
Office 365 - Türkçe (64 bit)
Altın Üyelik Bitiş Tarihi
31-01-2025
Deneyiniz.

C++:
Option Explicit

Sub Aktif_Sayfayi_Sil()
    Application.DisplayAlerts = False
    ActiveSheet.Delete
    Application.DisplayAlerts = True
    Sheets("ANA SAYFA").Select
End Sub
Teşekkür ederim hocam.
 

muratgunay48

Altın Üye
Katılım
10 Şubat 2010
Mesajlar
1,059
Excel Vers. ve Dili
Office 365 - Türkçe (64 bit)
Altın Üyelik Bitiş Tarihi
31-01-2025
Hocam, sizin yazdığınız kodlarda en başta "Option Explicit" oluyor mutlaka. Bendeki hiç bir dosyada bu mevcut değil. Sizin imzanız gibi bir satır mı. Yoksa elzem bir satır mı. Sadece merak.
Saygılarımla.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
41,454
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
:):):)

Hayır imzam değil..

O satır Dim ile başlayan tanımlamaları zorunlu kılar. Yani bu satır varsa kodlarınızın içinde "Satir" diye bir değişken kullanırsanız bunu kodlarınızın en başına Dim Satir As Long gibi tanımlamanız gerekir.
 

muratgunay48

Altın Üye
Katılım
10 Şubat 2010
Mesajlar
1,059
Excel Vers. ve Dili
Office 365 - Türkçe (64 bit)
Altın Üyelik Bitiş Tarihi
31-01-2025
:):):)

Hayır imzam değil..

O satır Dim ile başlayan tanımlamaları zorunlu kılar. Yani bu satır varsa kodlarınızın içinde "Satir" diye bir değişken kullanırsanız bunu kodlarınızın en başına Dim Satir As Long gibi tanımlamanız gerekir.
Bilgi için teşekkürler hocam.
 
Üst