Set Komutu,Değişken tanımlamasında SORUNUM var da?

Katılım
28 Ekim 2004
Mesajlar
19
Excel Vers. ve Dili
97,2000,2003
Merhaba,
vba çalışıyorum, çalışırken verilen örneklerde Set komutu ile yapılan değişken tanımlaması ile normal değişken tanımlaması arasındaki farkı çok iyi anlayamadım, bu konuda bilgisi olan arkadaşlardan yardım rica ediyorum.
saygılarımla,
 
Katılım
22 Haziran 2005
Mesajlar
998
Excel Vers. ve Dili
Office 2007 Türkçe
Önce şu kavramları anlamaya çalışalım

Değişken tanımlamak bir değişkenin tippini belirtmek demektir
Örnek:
Dim i as integer 'i değişkeninin tipini sayı olarak belirledik
dim c as Range 'c değerinin tipini hücre olarak belirledik.

şimdi bu değişkenlere değer atayalım

i=1 'i değişkeni 1 rakamına eşittir.
set c=Range("A1") c değişkeni A1 hücresine eşittir

Neden i değikeninde set kullanılmadı neden c değişkeninde set kullanıldı.
Neden i değikeninde set kullanılmadı: Çünkü 1 değeri statikdir yani duruktur yani başka bir özelliği yok tur 1 sadece 1 olabilir başka bir şey olamaz. Alt elemanı yada üst elemanı yoktur.
Neden c değişkeninde set kullanıldı: Çünkü A1 hücresi bir öğedir(Nesnedir). Bu nesnenin özellikleri vardır. bazı özellikleri; içindeki değer, içindeki değerin rengi, arkaplan rengi ve diğerleri. Bu özelliklerden değişen olduğunda aynen c değişkeninde de değişecektir yada tam tersi c değişkeninde bir değişiklik yapıldığında A1 hücreside aynen değişecektir.

Not: Değişkenler hakkında daha detaylı bilgi için forumda arama yapınız.
 
Katılım
28 Ekim 2004
Mesajlar
19
Excel Vers. ve Dili
97,2000,2003
alpi arkadaş teşekkür ederim,gerçekten çok güzel açıklamışsınız. Şimdi çok güzel oturdu diyebilirim. Üstadım "değişken" kelimesini sitenin üst menulerinden arama başlığı altında aradım fakat bulamadım, yanlışlığımı düzeltmeniz ve arama konusunda yardımınızı esirgemezseniz sevinirim.
Saygılarımla,
 
Katılım
28 Ekim 2004
Mesajlar
19
Excel Vers. ve Dili
97,2000,2003
Üstad anemos ; ilginiz için çok teşekkür ederim. Aşağıya değerli notlarınızdan aldığım alıntıda takıldığım ikinci bir konu var lütfen cehaletimi mazur görün, üstad, excel macrosunda modül yapısında prosedürler yazıyoruz,yanılıyor muyum,Yani visual basic deki gibi bir prosedür ve ayrıca tüm prosedürlerde geçerli olmasını istediğimiz değişkenleri barındıran bir modül prosedürü yok diye biliyorum.
Aşağıda anlattıklarınızdan excel macrosu yada VBA da değişkenin kavramını modul prosedür şeklinde anlayıp,her tüm modül prosedürlerde de ortak bir değişken kullanmak gerekiyor ise başına private kelimesinin bulunması gerektiği midir.
Saygılarımla,

DEĞİŞKENLERİN KAPSAMI VE ÖMRÜ


Değişkenin içinde taşıdığı değerin her prosedürde yada her modülde aynı olmasını, yada sadece içinde bulunduğu prosedürde geçerli olmasını isteyebiliriz. Bu özelliğe değişkenin faaliyet alanı diye tanımlıyoruz. Değişkenlerin üç tip faaliyet alanından bahsetmek mümkündür.
Prosedür seviyesi
Tanımlama işlemi prosedür içinde yapıldı ise değişkenimiz sadece bu prosedürde tanınmaktadır. Program akışı bir başka prosedüre geçtiğinde VBA bu değişken için ayrılan yeri boşaltmaktadır ve artık değişkenimiz tanınmamaktadır. Dolaylı tanımladığımız değişkenlerde Prosedür seviyesinde tanımlanmış kabul edilir.
Kod:
Sub AySonu()
Dim Odeme as Currency
……..
End Sub
Değişkenimizin ömrü-Static terimi : Bu değişkenimizin uygulama açık olduğu müddetce bir başka prosedürde de aynı değeri taşımasını istiyorsak Static kelimesi ile tanımlayabiliriz.
Kod:
Sub AySonu()
Static Odeme as Currency
……..
End Sub
Bu durumda uygulamamız sona erene kadar Odeme değişkenimiz son aldığı değer ne ise saklayacak ve prosedür bir kez daha çalıştığında bu son sakladığı değeri kullanacaktır.


Modül seviyesi – Private
Bir değişkenin modüldeki tüm prosedürlerde faaliyet göstermesi için prosedür dışında Dim yada Private anahtar kelimeleri ile tanımlanması gereklidir. ( Prosedür dışında kullanıldığında Dim kelimesi Private kelimesi ile aynı işi görür.)
Kod:
Private Gun as Date
Dim Odeme as Currency
Sub AySonu()
……..
End Sub
 
Son düzenleme:
Katılım
28 Ekim 2004
Mesajlar
19
Excel Vers. ve Dili
97,2000,2003
Üstad Allah razı olsun çok teşekkür ederim. Verdiğiniz bilgilerden dolayı
Saygılarımla,
 
Katılım
28 Ekim 2004
Mesajlar
19
Excel Vers. ve Dili
97,2000,2003
Üstad anemos ; ilginiz için çok teşekkür ederim. Aşağıya değerli notlarınızdan aldığım alıntıda takıldığım ikinci bir konu var lütfen cehaletimi mazur görün, üstad, excel macrosunda modül yapısında prosedürler yazıyoruz,yanılıyor muyum,Yani visual basic deki gibi bir prosedür ve ayrıca tüm prosedürlerde geçerli olmasını istediğimiz değişkenleri barındıran bir modül prosedürü yok diye biliyorum.
Aşağıda anlattıklarınızdan excel macrosu yada VBA da değişkenin kavramını modul prosedür şeklinde anlayıp,her tüm modül prosedürlerde de ortak bir değişken kullanmak gerekiyor ise başına private kelimesinin bulunması gerektiği midir.
Saygılarımla,

DEĞİŞKENLERİN KAPSAMI VE ÖMRÜ


Değişkenin içinde taşıdığı değerin her prosedürde yada her modülde aynı olmasını, yada sadece içinde bulunduğu prosedürde geçerli olmasını isteyebiliriz. Bu özelliğe değişkenin faaliyet alanı diye tanımlıyoruz. Değişkenlerin üç tip faaliyet alanından bahsetmek mümkündür.
Prosedür seviyesi
Tanımlama işlemi prosedür içinde yapıldı ise değişkenimiz sadece bu prosedürde tanınmaktadır. Program akışı bir başka prosedüre geçtiğinde VBA bu değişken için ayrılan yeri boşaltmaktadır ve artık değişkenimiz tanınmamaktadır. Dolaylı tanımladığımız değişkenlerde Prosedür seviyesinde tanımlanmış kabul edilir.
Kod:
Sub AySonu()
Dim Odeme as Currency
……..
End Sub
Değişkenimizin ömrü-Static terimi : Bu değişkenimizin uygulama açık olduğu müddetce bir başka prosedürde de aynı değeri taşımasını istiyorsak Static kelimesi ile tanımlayabiliriz.
Kod:
Sub AySonu()
Static Odeme as Currency
……..
End Sub
Bu durumda uygulamamız sona erene kadar Odeme değişkenimiz son aldığı değer ne ise saklayacak ve prosedür bir kez daha çalıştığında bu son sakladığı değeri kullanacaktır.


Modül seviyesi – Private
Bir değişkenin modüldeki tüm prosedürlerde faaliyet göstermesi için prosedür dışında Dim yada Private anahtar kelimeleri ile tanımlanması gereklidir. ( Prosedür dışında kullanıldığında Dim kelimesi Private kelimesi ile aynı işi görür.)
Kod:
Private Gun as Date
Dim Odeme as Currency
Sub AySonu()
……..
End Sub
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,369
Excel Vers. ve Dili
Office 365 (64 bit) - Türkçe
Merhaba,
Öncelikle söz konusu makale bana değil, moderatörümüz Danersin'e aittir. Bunu açıklığa kavuşturduktan sonra sorunuza gelelim.

excel macrosunda modül yapısında prosedürler yazıyoruz,yanılıyor muyum,Yani visual basic deki gibi bir prosedür ve ayrıca tüm prosedürlerde geçerli olmasını istediğimiz değişkenleri barındıran bir modül prosedürü yok diye biliyorum.
Bir değişkenin tüm modüllerde ve prosedürlerde geçerli olmasını istiyorsak, değişkeni "Public" ya da "Global" olarak tanımlamalıyız.

Bir değişken hangi prosedür içinde tanımlanmışsa, o prosedür için geçerlidir. Eğer prosedürlerin dışında tanımlanmışsa, içinde bulunduğu modüldeki tüm prosedürler için geçerlidir. Bu şekilde tanımlanacaksa Private ya da Dim ile kullanımı arasında fark yoktur.
 
Üst