• DİKKAT

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

Makroları Göster Kutusu

Katılım
27 Haziran 2010
Mesajlar
394
Excel Vers. ve Dili
Türkçe 2010 Ofis
Selamlar arkadaşlar,

Kullanıcının Alt+F8, fare ile sağ klik veya hızlı erişim çubuğu aracılığıyla makrolara erişebileceği özellikleri kapatmak ve ihtiyaç duyulduğunda açmak için şifre sormasını sağlamak istiyorum, bunun bir yolu varmı arkadaşlar, teşekkürler. (Amacım istemediğim kişiler makrolara erişemesin...)
 
Selamlar arkadaşlar,

Kullanıcının Alt+F8, fare ile sağ klik veya hızlı erişim çubuğu aracılığıyla makrolara erişebileceği özellikleri kapatmak ve ihtiyaç duyulduğunda açmak için şifre sormasını sağlamak istiyorum, bunun bir yolu varmı arkadaşlar, teşekkürler. (Amacım istemediğim kişiler makrolara erişemesin...)

Merhaba

Kodları yazdığınız modüllerin en üstüne aşağıdaki satırı yazarsanız makrolar Excel menülerinde görünmez. Ayrıca VB editörüne şifre koyarsanız modüllere de ulaşılamaz.

Kod:
Option Private module
 
Levent Beye ufak bir katkım olsun.
Option Private module

ifadesi en üstüne yazıldığı Modüle içindeki makroları göstermez.
Birden fazla modülünüz varsa her bir Modülün en başına eklemeniz gerekecek.
 
Tekrar selamlar modülde tamamdır,peki sayfanın kodundaki için bir şey yapılabilir mi
 
Tekrar selamlar modülde tamamdır,peki sayfanın kodundaki için bir şey yapılabilir mi
Sayfanın kod sayfasına neden prosedür yazıyorsunuz. Normal prosedürleri bence normal modül içinde toplayın. Değiştirme şansınız yoksa aşağıdaki gibi deneyin. Ancak ismiyle bu prosedürü çağırdığınız başka prosedürler varsa çağırma kodunu değiştirmeniz gerekir..

Kod:
Private Sub deneme()
.
.
End Sub
 
Son düzenleme:
Sayfanın kod sayfasına neden prosedür yazıyorsunuz. Normal prosedürleri bence normal modül içinde toplayın. Değiştirme şansınız yoksa aşağıdaki gibi deneyin. Ancak ismiyle bu prosedürü çağırdığınız başka prosedürler varsa çağırma kodunu değiştirmeniz gerekir..

Kod:
Private Sub deneme()
.
.
End Sub
Sayın uzmanım merhaba. Komut butonu kullanılacağı zaman mecburen Sayfa kısmına yazmamız gerekmiyor mu? Ben makro butonu kullanılacağı zaman modüle, komut butonu kullanılacağı zaman sayfaya yazılıyor diye biliyordum.
 
Sayın uzmanım merhaba. Komut butonu kullanılacağı zaman mecburen Sayfa kısmına yazmamız gerekmiyor mu? Ben makro butonu kullanılacağı zaman modüle, komut butonu kullanılacağı zaman sayfaya yazılıyor diye biliyordum.

Sayfa üzerindeki commandbutton olayları elbette içinde bulunduğu sayfanın kod sayfasına yazılır. Ancak bunların olayları zaten private olarak yazılır. Dolayısıyla menülerde görünmez. Aşağıdaki gibi.

Kod:
Private Sub CommandButton1_Click()
.
.
End Sub
 
İlave bilgi:

ActiveX veya Form denetimlerden eklediğiniz butonların kodlarını eğer sayfa modülüne yazarsanız; VBA projesini şifreleyerek korusanız bile birisi gelip de eğer o sayfayı başka bir Excel dosyasına taşırsa, sizin şifreleyerek gizlemeye çalıştığınız kodlar taşınan diğer Excel dosyasında deyim yerindeyse "kabak" gibi ortaya çıkar.

Bu nedenle, her 2 çeşit buton kullanımında esas kodlar kesinlikle sayfa modülünde değil, eklenecek standart bir modüle yerleştirildikten sonra butonlara yazılacak kodlarla, modüldeki kodlar çağırılarak kullanılmalıdır.

Örnek olarak Sayfa1 modülündeki ActiveX buton için;

C#:
Private Sub CommandButton1_Click()
    Call Test
End Sub

Module1 içerisinde;

C#:
Sub Test()
    MsgBox "Merhaba"
End Sub


Form Denetim kontrollerinden eklenen buton için zaten Module1 içindeki makroyu butona atayabilirsiniz....

.
 
Haluk hocam çok faydalı bir bilgi oldu, sağolasın, size de çok çok teşekkür ederim.
 
İlave bilgi:

ActiveX veya Form denetimlerden eklediğiniz butonların kodlarını eğer sayfa modülüne yazarsanız; VBA projesini şifreleyerek korusanız bile birisi gelip de eğer o sayfayı başka bir Excel dosyasına taşırsa, sizin şifreleyerek gizlemeye çalıştığınız kodlar taşınan diğer Excel dosyasında deyim yerindeyse "kabak" gibi ortaya çıkar.

Bu nedenle, her 2 çeşit buton kullanımında esas kodlar kesinlikle sayfa modülünde değil, eklenecek standart bir modüle yerleştirildikten sonra butonlara yazılacak kodlarla, modüldeki kodlar çağırılarak kullanılmalıdır.

Örnek olarak Sayfa1 modülündeki ActiveX buton için;

C#:
Private Sub CommandButton1_Click()
    Call Test
End Sub

Module1 içerisinde;

C#:
Sub Test()
    MsgBox "Merhaba"
End Sub


Form Denetim kontrollerinden eklenen buton için zaten Module1 içindeki makroyu butona atayabilirsiniz....

.
Haluk uzmanım merhaba
Verdiğiniz bilgiler için size ve Levent uzmanımıza teşekkür ederiz
 
Bir amatör olarak bir ilave bilgi de ben vereyim (deneme yanılmayla fark ettim az önce)

Dosyalarımdan birinin, “Bu Çalışma Kitabı” kısmının kod bölümünde Private Sub Workbook Open ile başlayan bir kod vardı.

“Sayfa1” kod bölümünde de “Private sub command buton” lu bir kod vardı.

Haluk uzmanımın verdiği bilgileri sayfa bölümünde aynen yaptıktan sonra,
“Bu Çalışma Kitabı” bölümündeki kodlara hiç dokunmadım.

Dosyanın (sadece) kodlar bölümünü şifreleyip kapatıp açtıktan sonra görünen sayfayı bir başka yeni dosyaya kopyaladım.

Ve yeni dosyayanın sayfa bölümüne baktığımda, sadece Call kısmının olduğunu gördüm.

Yani orjinal dosyamın “Bu Çalışma Kitabı” bölümündeki kodlar,
yeni kopya dosyada; yoktu. Bomboştu.

İyi de oldu doğrusu.

Yani bu çalışma kitabı bölümündeki workbook open ile başlayan kodları, bir modüle taşımadığım halde,
Kopyalanmamışlardı.
 
Ve yeni dosyayanın sayfa bölümüne baktığımda, sadece Call kısmının olduğunu gördüm.

Yani orjinal dosyamın “Bu Çalışma Kitabı” bölümündeki kodlar,
yeni kopya dosyada; yoktu. Bomboştu.

İyi de oldu doğrusu.

Yani bu çalışma kitabı bölümündeki workbook open ile başlayan kodları, bir modüle taşımadığım halde,
Kopyalanmamışlardı.


Şaşıracak bir şey yok, siz sadece ilgili sayfayı (dolayısıyle de o sayfanın modülünü) taşımışınız. ThisWorkbook modülü, içinde bulunduğu dosyaya aitttir.


.
 
Şaşıracak bir şey yok, siz sadece ilgili sayfayı (dolayısıyle de o sayfanın modülünü) taşımışınız. ThisWorkbook modülü, içinde bulunduğu dosyaya aitttir.


.
Haluk uzmanım bir küçük soru

Buçalışmakitabı bölümündeki Private Sub Workbook_open
ile
Modüldeki
Sub auto_open

zannettiğim kadarıyla ikisi de aynı işi yapıyor. Yani dosya açıldığı zaman içindeki kodlar otomatik çalışıyor.

Bunun dışında başka hangi amaçlarla kullanılır, farkları nelerdir, biraz bahseder misiniz? Zira önemli ve keyifli bir konu bu.

Bir de Private sub ile normal sub arasındaki farklar nelerdir. Hep merak etmişimdir.
Private sub sayfa bölümüne,
Sub ise modül bölümünde ikisi de kod çalıştırıyor. Ama biri var; diğeri niye var?
 
Haluk uzmanım bir küçük soru

Buçalışmakitabı bölümündeki Private Sub Workbook_open
ile
Modüldeki
Sub auto_open

zannettiğim kadarıyla ikisi de aynı işi yapıyor. Yani dosya açıldığı zaman içindeki kodlar otomatik çalışıyor.

Bunun dışında başka hangi amaçlarla kullanılır, farkları nelerdir, biraz bahseder misiniz? Zira önemli ve keyifli bir konu bu.

Gerçi Haluk beye sormuşsunuz ama sorunuzun ilk kısmına ben cevap vereyim. İkinci kısmı Haluk bey çok daha teknik detayıyla açıklayacaktır.

"Private Sub Workbook_open" dosyanın Thisworkbook modülüne yazılır. "Sub auto_open"ise normal modüle. İkiside aynı işlevi görürler. Aralarında sadece öncelik farkı vardır. Dosya açılırken "Private Sub Workbook_open" daha önce işlem yapacaktır. Bunun dışında başka bir farkı varmıdır bilmiyorum.
 
Geri
Üst