Kapalı Excel dosyasında sayfa adı sorgulama

Katılım
18 Temmuz 2007
Mesajlar
7
Excel Vers. ve Dili
2003 ingilizce
Forumdaki herkese selamlar,

Konuyu araştırdım fakat forumda göremedim. Forumda varıysa affedin.

Kapalı bir excel dosyasından veri alıyorum fakat dosyadaki sayfaların isimlerini herzaman bilemiyorum. Kapalı olan dosyanın sayfalarının isimlerini bulabilir miyim?

Örnek: Ekteki hedef.xls dosyası C:\'de bulunuyor. ana.xls dosyasındaki buton ile hedef.xls içindeki sayfalardan veri alıyorum [ExecuteExcel4Macro(...)] ile.

Ancak benim bildirdiğim sayfa hedef.xls içinde yok ise #REF! hatası veriyor.


Yardımlarınız için çok teşekkür ederim.
 

Korhan Ayhan

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

Kullandığınız kodu aşağıdaki şekilde değiştirip denermisiniz.

Kod:
Private Sub CommandButton1_Click()
    ay = Range("E1")
    If Not IsError(ExecuteExcel4Macro("'C:\[hedef.xls]" & ay & "'!R1C1")) Then
    For i = 1 To 10
    Range("B" & i) = ExecuteExcel4Macro("'C:\[hedef.xls]" & ay & "'!R" & i & "C2")
    Next
    Else
    MsgBox "Aranan sayfa bulunamamıştır !", vbCritical
    End If
End Sub
 
Katılım
18 Temmuz 2007
Mesajlar
7
Excel Vers. ve Dili
2003 ingilizce
Teşekkürler, kod işimi gördü.

İlginiz için teşekkür ederim. Örnek dosyada kodları düzelttim ve işe yaradı.
Bu arada kapalı dosyadaki sayfa adlarını listelemenin yolu var mı acaba.

Konu başlığını bu şekilde açmıştım. Hem ben hem de merak eden diğer arkadaşlar için faydalı olabilir.

Selamlar...
 

Korhan Ayhan

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

Sn. Zeki GÜRSOY beyin bir başka başlıkta yayınladığı aşağıdaki kodu kullanabilirsiniz.

C:\Kitap1.xls kısmını kendinize göre düzenlemeyi unutmayınız.

Kod:
Option Explicit
 
Sub KAPALI_DOSYADAKİ_SAYFA_İSİMLERİ()
    Dim Katalog As Object, Bağlantı As Object, Sayfa As Object, Satır As Integer
 
    Set Bağlantı = CreateObject("ADODB.Connection")
    Set Katalog = CreateObject("ADOX.Catalog")
 
    Bağlantı.Open _
    "Driver={Microsoft Excel Driver (*.xls)};Dbq=[COLOR=red][B]C:\Kitap1.xls[/B][/COLOR];"
    Katalog.ActiveConnection = Bağlantı
 
    [A:A].ClearContents
 
    'If Sayfa.Type = "TABLE" Then alan isimlerini döndürür.
 
    For Each Sayfa In Katalog.Tables
        If Sayfa.Type = "SYSTEM TABLE" Then
            Satır = Satır + 1
            Cells(Satır, 1) = Left$(Sayfa.Name, Len(Sayfa.Name) - 1)
        End If
    Next
 
    Set Bağlantı = Nothing
    Set Katalog = Nothing
    MsgBox "İşleminiz tamamlanmıştır.", vbInformation
End Sub
 
Katılım
17 Haziran 2006
Mesajlar
348
Excel Vers. ve Dili
2003 - TR / 2007 - TR
Selam, kod çok güzel çalışıyor. Kapalı sayfada şifre varsa nasıl düzenlemek gerekiyor. Teşekkürler...

Not: Başka dosyada birkaç denemeden sonra farkettim, 89 sayfa olmasına rağmen 6 adet listeledi..
 
Son düzenleme:

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,334
Excel Vers. ve Dili
Office 2019 (64 bit) - Türkçe
Selam, kod çok güzel çalışıyor. Kapalı sayfada şifre varsa nasıl düzenlemek gerekiyor. Teşekkürler...

Not: Başka dosyada birkaç denemeden sonra farkettim, 89 sayfa olmasına rağmen 6 adet listeledi..
Selamlar,

Şifreli excel kapalı dosyasına ADO bağlantısı açılamıyor malesef. Dosyanız şifresiz olmalı.

89 sayfanın 6 sını listelemesi ters bir durum. Atladığınız bir durum olmalı.
 
Katılım
17 Haziran 2006
Mesajlar
348
Excel Vers. ve Dili
2003 - TR / 2007 - TR
Selamlar... Boş bir sayfa açıyorum 15 sayfa açıyorum. Diğer sayfadan 4. mesajdakii kod ile standart çalışıyor. Ama bir kaç dosyam bulunmakta ama bu dosyalarda eksik listeliyor. C:\ dizininde...

Not: Zeki bey zannederim sorun sayfa adında kullanılan boşluklardan kaynaklanıyor. "Sayfa1" ise sıralıyor, "Sayfa 1" ise almıyor. Boşluk olmayanları sıralıyor. Yeni açtığım 15 sayfada da aynı durumdadır.
 
Son düzenleme:

Korhan Ayhan

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

Sn. htrk,

Aşağıdaki kodu kullanabilirsiniz. Fakat bu kodda eğer kapalı dosyanızda sayfalarda alanlara ad tanımlası yaptıysanız bunlarda listelenmektedir.

Benim aklıma gelen en uygun çözüm kapalı dosyayı açıp döngü ile sayfa isimlerini almaktır. İstenirse bu yönde çözüm üretebiliriz.

Kod:
Option Explicit
 
Sub KAPALI_DOSYADAKİ_SAYFA_İSİMLERİ()
    Dim Katalog As Object, Bağlantı As Object, Sayfa As Object, Satır As Integer
 
    Set Bağlantı = CreateObject("ADODB.Connection")
    Set Katalog = CreateObject("ADOX.Catalog")
 
    Bağlantı.Open _
    "Driver={Microsoft Excel Driver (*.xls)};Dbq=C:\Kitap1.xls;"
    Katalog.ActiveConnection = Bağlantı
 
    [A:A].ClearContents
 
    For Each Sayfa In Katalog.Tables
        If Sayfa.Type = "TABLE" Or Sayfa.Type = "SYSTEM TABLE" Then
            Satır = Satır + 1
            Cells(Satır, 1) = Replace(Replace(Sayfa.Name, "$", ""), "'", "")
        End If
    Next
 
    Set Bağlantı = Nothing
    Set Katalog = Nothing
    MsgBox "İşleminiz tamamlanmıştır.", vbInformation
End Sub
 

Korhan Ayhan

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

Aşağıdaki kod ile kapalı olan dosya açılarak sayfa isimleri alınmaktadır. Bu şekilde şifreli dosyalarda da işlem yapabilirsiniz.

Kod:
Option Explicit
 
Sub KAPALI_DOSYADAKİ_SAYFA_İSİMLERİ()
    Dim HEDEF_DOSYA As Workbook, Sayfa As Object, Satır As Integer
 
    Application.ScreenUpdating = False
 
    Workbooks.Open Filename:="C:\Kitap1.xls", UpdateLinks:=3, Password:="12345", WriteResPassword:="12345"
    Set HEDEF_DOSYA = ActiveWorkbook
 
    ActiveWindow.Visible = False
 
    [A:A].ClearContents
 
    For Each Sayfa In HEDEF_DOSYA.Worksheets
        Satır = Satır + 1
        Cells(Satır, 1) = Sayfa.Name
    Next
 
    HEDEF_DOSYA.Close 0
 
    Application.ScreenUpdating = True
 
    MsgBox "İşleminiz tamamlanmıştır.", vbInformation
End Sub
 
Son düzenleme:
Katılım
17 Haziran 2006
Mesajlar
348
Excel Vers. ve Dili
2003 - TR / 2007 - TR
Selamlar...

Sonuç veriyor fakat 15 civarı ad tanımlama bulunmaktadır. Acaba sayfa isimleriini birleştirmiş olsaydı, 3. sayfadan iyibaren yazdıkmak için nasıl olmalıdır.
Tabiki birleştirilmeden sonuç tercihimdir.
 
Katılım
17 Haziran 2006
Mesajlar
348
Excel Vers. ve Dili
2003 - TR / 2007 - TR
Selam, 9. mesajınız sonuç veriyor fakat dosyaya bağlı başka dosyada bulunmakta olduğu için update edilmek istiyor yani dosya açılıyor. Açık kullanmak söz konusu olunca dış veri özelliği ile alabiliyorum..

Not: Şifreli sayfalarda da çalışıyor, sadece update edilmemesi sorunu devam ediyor..
 
Son düzenleme:

Korhan Ayhan

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

9. mesajımdaki koda güncelleme koduda eklenmiştir. İncelermisiniz.
 
Katılım
17 Haziran 2006
Mesajlar
348
Excel Vers. ve Dili
2003 - TR / 2007 - TR
Selamlar, ilginize çok çok teşekkürler..

Bu şekilde sorunsuz çalışıyor, kapalı sayfanın 3. sayfasından itibaren almak mümkünmüdür...
 

Korhan Ayhan

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

Aşağıdaki kodu denermisiniz.

Kod:
Option Explicit
 
Sub KAPALI_DOSYADAKİ_SAYFA_İSİMLERİ()
    Dim HEDEF_DOSYA As Workbook, Sayfa As Object, Satır As Integer, X As Integer
 
    Application.ScreenUpdating = False
 
    Workbooks.Open Filename:="C:\Kitap1.xls", UpdateLinks:=3, Password:="12345", WriteResPassword:="12345"
    Set HEDEF_DOSYA = ActiveWorkbook
 
    ActiveWindow.Visible = False
 
    [A:A].ClearContents
 
    For X = 3 To HEDEF_DOSYA.Worksheets.Count
        Satır = Satır + 1
        Cells(Satır, 1) = HEDEF_DOSYA.Sheets(X).Name
    Next
 
    HEDEF_DOSYA.Close 0
 
    Application.ScreenUpdating = True
 
    MsgBox "İşleminiz tamamlanmıştır.", vbInformation
End Sub
 
Katılım
17 Haziran 2006
Mesajlar
348
Excel Vers. ve Dili
2003 - TR / 2007 - TR
Selamlar,

Zeki beyin kodu ile de aynı sonuca ulaştım ama 3. sayfadan itibaren sayfa isimlerini almak için nasıl düzeltme gerekir. (Şifresiz)

Kod:
Sub KAPALI_DOSYADAKİ_SAYFA_İSİMLERİ1()
    Dim Katalog As Object, Bağlantı As Object, Sayfa As Object, Satır As Integer
 
    Set Bağlantı = CreateObject("ADODB.Connection")
    Set Katalog = CreateObject("ADOX.Catalog")
 
    Bağlantı.Open _
    "Driver={Microsoft Excel Driver (*.xls)};Dbq=C:\Kitap1.xls;"
    Katalog.ActiveConnection = Bağlantı
 
    [I:I].ClearContents
 
    For Each Sayfa In Katalog.Tables
        If Sayfa.Type = "TABLE" Then
            Satır = Satır + 1
            Cells(Satır, 9) = Left$(Sayfa.Name, Len(Sayfa.Name) - 2)
        End If
    Next
 
    Set Bağlantı = Nothing
    Set Katalog = Nothing
    MsgBox "İşleminiz tamamlanmıştır.", vbInformation
End Sub
 
Son düzenleme:

Korhan Ayhan

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

Aşağıdaki kodu denermisiniz.

Kod:
Option Explicit
 
Sub KAPALI_DOSYADAKİ_SAYFA_İSİMLERİ1()
    Dim Katalog As Object, Bağlantı As Object, Sayfa As Object, Satır As Integer, Say As Integer
 
    Set Bağlantı = CreateObject("ADODB.Connection")
    Set Katalog = CreateObject("ADOX.Catalog")
 
    Bağlantı.Open _
    "Driver={Microsoft Excel Driver (*.xls)};Dbq=C:\Kitap1.xls;"
    Katalog.ActiveConnection = Bağlantı
 
    [I:I].ClearContents
 
    For Each Sayfa In Katalog.Tables
        If Sayfa.Type = "TABLE" Then
            Say = Say + 1
            If Say >= 3 Then
            Satır = Satır + 1
            Cells(Satır, 9) = Left$(Sayfa.Name, Len(Sayfa.Name) - 2)
            End If
        End If
    Next
 
    Set Bağlantı = Nothing
    Set Katalog = Nothing
    MsgBox "İşleminiz tamamlanmıştır.", vbInformation
End Sub
 

baydeniro

Altın Üye
Katılım
26 Ocak 2007
Mesajlar
4,625
Excel Vers. ve Dili
Ofis 2016
Altın Üyelik Bitiş Tarihi
20-02-2025
Paylaşım için teşekkürler.
 

Murat OSMA

Altın Üye
Altın Üye
Katılım
23 Mayıs 2011
Mesajlar
5,508
Excel Vers. ve Dili
Microsoft 365 TR-EN
Altın Üyelik Bitiş Tarihi
31-12-2028
Dosyadaki sayfa isimlerini UserFom'daki ListBox'ta listelemek için şu kodları kullanabilirsiniz;

Kod:
Private Sub UserForm_Initialize()
    Dim con As Object, kat As Object, tbl As Object
    Dim dosya As String
    
    Set con = CreateObject("adodb.connection")
    Set kat = CreateObject("adox.catalog")
    Set tbl = CreateObject("adox.table")
    
    dosya = ThisWorkbook.FullName
    con.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dosya & _
    ";Extended Properties=""Excel 8.0"""
    
    kat.ActiveConnection = con
    For Each tbl In kat.Tables
        ListBox1.AddItem Left(tbl.Name, Len(tbl.Name) - 1)
    Next tbl
End Sub

Private Sub UserForm_Terminate()
    Set tbl = Nothing: Set kat = Nothing: Set con = Nothing
    dosya = vbNullString
End Sub
 
Üst