• DİKKAT

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

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.
 
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
 
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...
 
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
 
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:
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ı.
 
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:
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
 
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:
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.
 
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:
Selamlar,

9. mesajımdaki koda güncelleme koduda eklenmiştir. İncelermisiniz.
 
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...
 
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
 
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:
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
 
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
 
Geri
Üst