• DİKKAT

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

For each ile sayfa adını bulma

kadir78

Altın Üye
Katılım
6 Nisan 2016
Mesajlar
227
Excel Vers. ve Dili
office 2019
İyi günler. Aşağıdaki kodlarda For each ile açılan yeni kitapdaki sayfalar içinde, aranan sayfayı bulamıyor. Açılan kitapda 10 adet sayfa var fakat kod ilk sayfaya bakıyor ve arama yapmıyor. Çözemedim yardımcı olurmusunuz.

Kod:
dim s1, s2, syf as worksheet
dim trh as string
dim k1 as workbook

set s1 = sheets("sayfa1")
trh = s1.range("B2").value

workbooks.open ("\data.xlsx")
set k1 = activeworkbook

for each syf In k1.worksheets

    if syf.name = trh then
    set s2 = k1.worksheets(trh)
    else
    exit sub
    end if

next syf
 
Son düzenleme:
Merhaba,
Döngü yerine Fonksiyon kullanmanız daha mantıklı olacaktır. Alternatif olsun.

Kod:
Sub SayfaKontrol()

    Dim k1 As Workbook
    Dim trh As String
    
    trh = "SayfaAdı"
    
    Workbooks.Open ("\data.xlsx")
    Set k1 = ActiveWorkbook
    
    If SayfaVarYok(trh) Then
        MsgBox trh & " Adlı Sayfa Var"
    Else
        MsgBox trh & " Adlı Sayfa Yok"
    End If
    
End Sub

Kod:
Function SayfaVarYok(wksName As String) As Boolean

    On Error Resume Next
    SayfaVarYok = CBool(Len(Worksheets(wksName).Name) > 0)
    
End Function
 
merhaba birde böyle deneyin.
Kod:
Sub a()
Dim s1, s2, syf As Worksheet
Dim trh As String
Dim k1 As Workbook

Set s1 = Sheets("sayfa1")
trh = s1.Range("B2").Value

Workbooks.Open (ThisWorkbook.Path & "\data.xlsx")
Set k1 = ActiveWorkbook

For i = 1 To k1.Worksheets.Count

    If Sheets(i).Name = trh Then
    Set s2 = k1.Worksheets(trh)
    Exit Sub
    End If
Next
End Sub
 
merhaba birde böyle deneyin.
Kod:
Sub a()
Dim s1, s2, syf As Worksheet
Dim trh As String
Dim k1 As Workbook

Set s1 = Sheets("sayfa1")
trh = s1.Range("B2").Value

Workbooks.Open (ThisWorkbook.Path & "\data.xlsx")
Set k1 = ActiveWorkbook

For i = 1 To k1.Worksheets.Count

    If Sheets(i).Name = trh Then
    Set s2 = k1.Worksheets(trh)
    Exit Sub
    End If
Next
End Sub

Kodlar çalışıyor sağolun.
 
Son düzenleme:
Kodun çalıştığını görmeniz için Msgbox ile mesaj veriyor.
Kod:
Sub a()
Dim s1, s2, syf As Worksheet
Dim trh As String
Dim k1 As Workbook
Set s1 = Sheets("sayfa1")
trh = s1.Range("B2").Value
Workbooks.Open (ThisWorkbook.Path & "\data.xlsx")
Set k1 = ActiveWorkbook
For i = 1 To k1.Worksheets.Count
    If Sheets(i).Name = trh Then
    Set s2 = k1.Worksheets(trh)
   
    Exit for
    End If
Next
 MsgBox s2.Name
End Sub
 
Son düzenleme:
Ben yanlış bir yer yazmışım kusuruma bakmayın. Kodlar çalışıyor çok sağolun emeğinize sağlık olsun teşekkür ederim.
 
Kitabı açtıktan sonra döngüye girmeden aşağıdaki satırları kullanarakta sayfanın varlığını kontrol edebilirsiniz.

C++:
On Error Resume Next
Set S2 = Nothing
Set S2 = K1.Sheets(trh)
On Error GoTo 0
If Not S2 Is Nothing Then MsgBox "Sayfa var..."
 
Kitabı açtıktan sonra döngüye girmeden aşağıdaki satırları kullanarakta sayfanın varlığını kontrol edebilirsiniz.

C++:
On Error Resume Next
Set S2 = Nothing
Set S2 = K1.Sheets(trh)
On Error GoTo 0
If Not S2 Is Nothing Then MsgBox "Sayfa var..."

Korhan hocam sağolun. Sayfa için bir kontrol şartına ihtiyaç vardı. Ben bir kontrol şartı yazmayı denedim fakat olmadı, sayfayı bulamazsa hata veriyordu. Emeğinize sağlık.
 
Önerimdeki IF sorgu satırına ELSE ekleyerek sayfanın olmaması durumunu da kontrol edebilirsiniz. Sanırım bu değişikliği yapabilirsiniz.
 
Geri
Üst