Workbook altında Sayfa tanımlama

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,063
Excel Vers. ve Dili
Office 2013 İngilizce
Merhabalar,

Merhaba,
Aşağıdaki kodda Sayfa tanımlaması yaparken;

Sayfa adını Sayfada yazıldığı gibi değil de; ekli görselde görüleceği üzere VBA Project ektanında yazdığı gibi Sayfa1, Sayfa2 olarak yazmak istersek, nasıl bir düzenleme yapmak gerekir.
Set SHT = WB1.Sheets(Sayfa3)
Set SHT = WB1.Sayfa3


şekillerinde yazdım fakat hata verdi.


Kod:
Dim WB1 As Workbook
Dim WB2 As Workbook

Dim SHT As Worksheet
Dim sh1 As Worksheet
Dim sh2 As Worksheet

    Set WB1 = ThisWorkbook
    
    WB1.Activate
    
     Set SHT = WB1.Sheets("Form")
     
        Set sh1 = WB1.Sheets("Report")
yardımcı olursanız sevinirim.
iyi Akşamlar.
 

Ekli dosyalar

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
"Set" ile atama yapmadan kullanın....

Aşağıdaki kod; o an aktif olan Excel dosyasının Sayfa3 kod isimli sayfasının A1 hücresine TEST yazar.

C++:
Sayfa3.Range("A1") = "TEST"
.
 

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,063
Excel Vers. ve Dili
Office 2013 İngilizce
Haluk Hocam yeni açılan dosyada da sayfalar var,
"Set" ile atama yapmadan kullanın....

Aşağıdaki kod; o an aktif olan Excel dosyasının Sayfa3 kod isimli sayfasının A1 hücresine TEST yazar.

C++:
Sayfa3.Range("A1") = "TEST"
.
Haluk Hocam merhaba,
yeni açılan dosyada da sayfalar var, iki dosya arasında veri alış verişi yapıyor; dolayısyla sayfalar karışmasın diye; atamalar yoluyla sayfa tanımlamaları yapmak istiyordum,
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Biraz karışık olmakla birlikte istediğiniz yapılabilir.....

Bu iş için önce, aşağıdaki resimde belirtildiği gibi bilgisayarınızda Excel'in seçenekleri arasında VBA projelerine erişim izni vermelisiniz.


Capture.PNG


Daha sonra, ana Excel dosyanızda ("Test.xlsm") ve "C:\TestFolder\Report_ADO.xlsm" dosyalarınızın her ikisinde de Sheet1 "CodeName" li sayfaların olduğunu ve aşağıdaki resimde belirtildiği gibi;

- Ana Excel dosyasında Sheet1'in görünen sayfa isminin "Rapor",

- Diğer dosyadaki Sheet1'in görünen sayfa isminin "Özet" olduğunu kabul edersek;


Capture.PNG


Ana Excel dosyasına bir modül ilave edip, aşağıdaki kodları yerleştirdikten sonra "Test" isimli prosedürü çalıştırdığınızda, mySh1 ve mySh2 değişkenlerine ana Excel dosyası ve diğer dosyadaki Sheet1 sayfaları "Set" ile atanarak, görünen sayfa isimleri MsgBox fonksiyonuyla size bildirilecektir.

C++:
Function getSheet(sheetCodeName As String, Optional WB As Workbook) As Worksheet
    If WB Is Nothing Then Set WB = ThisWorkbook
    
    Set getSheet = WB.Sheets(WB.VBProject.VBComponents(sheetCodeName).Properties("Index"))
End Function
'
Sub Test()
    Dim WB1 As Workbook, WB2 As Workbook
    Dim mySh1 As Worksheet, mySh2 As Worksheet
    
    Set WB1 = ThisWorkbook
    Set mySh1 = getSheet("Sheet1", WB1)
    
    MsgBox mySh1.Name
    
    
    Set WB2 = Workbooks.Open("C:\TestFolder\Report_ADO.xlsm")
    Set mySh2 = getSheet("Sheet1", WB2)
    
    MsgBox mySh2.Name
End Sub

.
 
Son düzenleme:

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,063
Excel Vers. ve Dili
Office 2013 İngilizce
Biraz karışık olmakla birlikte istediğiniz yapılabilir.....

Bu iş için önce, aşağıdaki resimde belirtildiği gibi bilgisayarınızda Excel'in seçenekleri arasında VBA projelerine erişim izni vermelisiniz.


Ekli dosyayı görüntüle 227298


Daha sonra, ana Excel dosyanızda ("Test.xlsm") ve "C:\TestFolder\Report_ADO.xlsm" dosyalarınızın her ikisinde de Sheet1 "CodeName" li sayfaların olduğunu ve aşağıdaki resimde belirtildiği gibi;

- Ana Excel dosyasında Sheet1'in görünen sayfa isminin "Rapor",

- Diğer dosyadaki Sheet1'in görünen sayfa isminin "Özet" olduğunu kabul edersek;


Ekli dosyayı görüntüle 227299


Ana Excel dosyasına bir modül ilave edip, aşağıdaki kodları yerleştirdikten sonra "Test" isimli prosedürü çalıştırdığınızda, mySh1 ve mySh2 değişkenlerine ana Excel dosyası ve diğer dosyadaki Sheet1 sayfaları "Set" ile atanarak, görünen sayfa isimleri MsgBox fonksiyonuyla size bildirilecektir.

C++:
Function getSheet(sheetCodeName As String, Optional WB As Workbook) As Worksheet
    If WB Is Nothing Then Set WB = ThisWorkbook
   
    Set getSheet = WB.Sheets(WB.VBProject.VBComponents(sheetCodeName).Properties("Index"))
End Function
'
Sub Test()
    Dim WB1 As Workbook, WB2 As Workbook
    Dim mySh1 As Worksheet, mySh2 As Worksheet
   
    Set WB1 = ThisWorkbook
    Set mySh1 = getSheet("Sheet1", WB1)
   
    MsgBox mySh1.Name
   
   
    Set WB2 = Workbooks.Open("C:\TestFolder\Report_ADO.xlsm")
    Set mySh2 = getSheet("Sheet1", WB2)
   
    MsgBox mySh2.Name
End Sub

.
Çok Teşekkürler Haluk Hocam,
emeğinize sağlık!
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,330
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Eğer sayfaların indexleri yani dosya içindeki konumları değişmiyorsa alternatif olarak bu index numaralarını kullanarak ta sonuca gidebilirsiniz.

Set S1 = WB1.Sheets(1)
Set S2 = WB2.Sheets(1)
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,330
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Ek olarak normal döngü yöntemini kullanarak sayfaların kod adlarını (CodeName) kontrol ederek sonuca gidebilirsiniz.

Kendinize uyarlarsınız.

C++:
Option Explicit

Sub Sayfa_Kontrol()
    Dim Sh As Worksheet, S1 As Worksheet
    
    For Each Sh In ThisWorkbook.Worksheets
        If Sh.CodeName = "Sheet1" Then
            Set S1 = Sh
            Exit Sub
        End If
    Next

    If S1 Is Nothing Then
        MsgBox "Kod adı Sheet1 olan sayfa bulunamadı!", vbCritical
    End If
End Sub
 
Üst