Birden Fazla Dosyadaki Çalışma Sayfalarını Say

Anonim

Günlük olarak çok sayıda excel dosyasıyla karşılaştığınız ve her çalışma kitabında bulunan çalışma sayfalarının sayısını bulmanıza yardımcı olacak hızlı bir mekanizma istediğiniz bir durumu düşünün. Benzer bir sorununuz varsa, bu makaleyi kaçırmamalısınız, çünkü size çok yardımcı olacaktır.

Bu yazıda, VBA kodu ile birden fazla dosyadaki çalışma sayfalarını nasıl sayacağımızı öğreneceğiz.

Soru:Dosya adları listesini okuyabilen ve her dosyada bulunan çalışma sayfalarının sayısını döndürebilen makroya ihtiyacım var (bu, aracılığıyla oluşturulan bir dizi dosyada doğru sayıda çalışma sayfasının mevcut olduğundan emin olmak için bir denetim mekanizmasıdır). başka bir süreç). Makronun, dosyaların bulunduğu klasörün yolunu oluşturması (tümü aynı klasörde), ardından ilk dosyayı bulmalı, çalışma sayfası sayısını belirlemeli ve sonraki dosya için tekrarlama vb.

Bunu, yalnızca dosya adlarına başvurarak bir formülle yapabileceğimi düşündüm, ancak Excel'in çalışma sayfası sayıları için doğrudan bir formülü olmadığına inanıyorum. Teşekkürler!

Orijinal soruyu okumak istiyorsanız buraya tıklayın

.xlsx uzantılı bir klasöre kaydedilen dosyaların anlık görüntüsü aşağıdadır

Not: Parola korumalı dosya yoktur.

Kodu almak için VB editörünü başlatmak için aşağıdaki adımları izlememiz gerekiyor:

  • Geliştirici sekmesine tıklayın
  • Kod grubundan Visual Basic'i seçin

  • Aşağıdaki kodu standart modüle kopyalayın
Sub ListSheetCounts() Dim Cell As Range Dim Conn As Object Dim Cat As Object Dim ConnStr As Dize Dim n As Long Dim Rng As Range Dim RngEnd As Variant Dim WkbPath As Variant Dim Wks As Worksheet ' Çalışma kitaplarının bulunduğu klasör yolu. WkbPath = "C:\Users\Test" ' Çalışma kitabı listesini içeren çalışma sayfasının adı. Set Wks = Worksheets("Sayfa1") ' Çalışma kitabı listesinin başlangıç ​​hücresi. Set Rng = Wks.Range("A2") ' Çalışma kitabı adı listesindeki hücre aralığını alın. Set RngEnd = Wks.Cells(Rows.Count, Rng.Column).End(xlUp) If RngEnd.Row >= Rng.Row Sonra Set Rng = Wks.Range(Rng, RngEnd) ' Bu makro için gerekli ADO nesnelerini oluşturun . Set Conn = CreateObject("ADODB.Connection") Set Cat = CreateObject("ADOX.Catalog") ' Gerekirse yola son bir ters eğik çizgi ekleyin. WkbPath = IIf(Right(WkbPath, 1) "\", WkbPath & "\", WkbPath) ' Çalışma kitabı listesindeki her hücrede ilerleyin. Rng'deki Her Hücre İçin ' Çalışma kitabı için çalışma sayfası sayısını alın. ConnStr = "Sağlayıcı=Microsoft.ACE.OLEDB.12.0;Data Source=" _ & WkbPath & Cell _ & ";Extended Properties=""Excel 12.0 Xml;HDR=YES;IMEX=1;"" Conn.Open ConnStr Set Cat.ActiveConnection = Conn ' Sayıyı, listedeki çalışma kitabı adının sağındaki bir sütundaki hücreye kopyalayın. Cell.Offset(n, 1) = Cat.Tables.Count Conn.Close Sonraki Hücre ' Temizle. Set Cat = Hiçbir Şey Set Conn = Hiçbir Şey End Sub 

  • Makroyu çalıştırırken çalışma sayfalarının sayısını alacağız. Aşağıdaki anlık görüntüye bakın:

Not: Yukarıdaki makro, .xlsx ve .xls uzantısı için çalışır ve .xlsm Makro etkin uzantı için çalışmaz.

  • Yukarıdaki dosyaların tümü .xlsx uzantılıdır
  • Sahte excel sayfası ekleyelim, yani Sayfa 10
  • Aynı isimde .xlsx & .xls uzantılı bir dosyamız varsa, o zaman dosyanın adını ilgili uzantılarıyla birlikte test dosyamızda da belirtmemiz gerekir (A sütunu) böylece makro, bulunduğumuz dosyayı tanımlayabilir. atıfta bulunun ve bize doğru sonucu verin
  • Aynı isimli dosyanın uzantısından bahsetmediysek veya bahsetmeyi unuttuysak, makro bize .xlsx uzantısının sayısını verecektir. Aşağıdaki anlık görüntüye bakın:

  • .xlsx & .xls uzantılı Sayfa 10 için sayfa sayısını almak için dosya adını ilgili uzantılarıyla birlikte belirtmemiz gerekir.

Nihai çıktının anlık görüntüsü aşağıda gösterilmiştir:

Çözüm: Yukarıdaki makro kodunu kullanarak, birden fazla dosyadaki çalışma sayfalarını sayabiliriz ve özel sonucu elde etmek gerekirse, VBA kodunda biraz değişiklik yapabiliriz.

Bloglarımızı beğendiyseniz, Facebook'ta arkadaşlarınızla paylaşın. Ayrıca bizi Twitter ve Facebook'ta da takip edebilirsiniz.
Sizden haber almayı çok isteriz, işimizi nasıl iyileştirebileceğimizi, tamamlayabileceğimizi veya yenileyebileceğimizi ve sizin için daha iyi hale getirebileceğimizi bize bildirin. Bize e-posta sitesinde yazın