• DİKKAT

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

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,
 
Ö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.
 
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,
 
Ü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:
Üstad Allah razı olsun çok teşekkür ederim. Verdiğiniz bilgilerden dolayı
Saygılarımla,
 
Ü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
 
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.
 
Geri
Üst