Çözüldü Çalışma kitabını makroyla şifreleme

hakki83

Site Üyesi
Excel Versiyonu
Excel 2016
Excel Sürümü
64 Bit
Excel Dili
Türkçe
Selamlar

Bir excel dosyamızı şifrelemek istediğimizde, Dosya sekmesindeki,
“Çalışma Kitabını Koru”
“Parola ile Şifrele” yi tıklayarak parolamızı girer ve şifreleriz. Veya Farklı Kaydet esnasında şifreleyebiliriz.

Örnek olarak kullandığımız parola 123 olsun. Dosya şifrelemeyi makro ile yapmak istiyorum.Şifrelenmemiş bir dosyayı makro ile şifreleyeceğim. Mesela dosyadan çıkarken olabilir. (Workbook Before Close)
En sade haliyle kodlarını rica ederim.
Alternatif kodlar da olursa denemek isterim.
Teşekkür ederim.
 
Merhabalar Sn. @hakki83

ActiveWorkbook.SaveAs yazıp bir boşluk bıraktığınız zaman, farklı kaydet işlemi için kullanılacak özellikler açılır.
1632896528110.webp

-- Bu özellikler içinde Password kısmına yazacağınız şifre, dosya açılışında sorulacak şifredir.
-- Kullandığınız, Farklı kaydet koduna Password:=123 şeklinde ekleme yapmanız yeterlidir.
 
Moderatörün son düzenlenenleri:
ActiveWorkbook.SaveAs kodu tek satırda, virgül ile ayrılarak yazılmalı. Kod uzun olduğu için alt satıra geçmek isterseniz alt tire ( _ ) kullanmalısınız.
-- Ayrıca Filename özelliği boş olmamalı, burada dosyanın kayıt edileceği yer ve dosya adı belirtilmelidir.

Örnek farklı kaydet satırı,
-- Bu satırdaki D:\KullanıcıDosyaları\İndirilenDosyalar\Kitap1.xlsm kısmını dosyaları kayıt edeceğiniz konuma göre değiştiriniz.
VBA:
İçeriği görüntülemek için giriş yapmalısınız
(1 satır)

Aynı kodun alt tire ile birden fazla satıra yazılmış hali
VBA:
İçeriği görüntülemek için giriş yapmalısınız
(3 satır)
 
Denemeler yapmaya başlayacağım. (An itibariyle Henüz denemelere başlamadım)

Sorularım olacak. Ama ilk sorumu hemen sorayım.

Dosyanın kendisini, kendi adıyla, ve konum belirtmeden; ve çıkışta karşımıza sorular çıkmadan, şifreli hale getirmenin çözümü var mıdır?

Ben şöyle düşünmüştüm.
Dosya açıkken (ve henüz şifreli değilken), dosyamı kapatma esnasında, şifreli hale getirip kapatacak, ve şifreli olacak.

Hatta gözünüzde canlandırmanız açısından daha açık ve net tarif edeyim.

İki amaçla kullanacağım.

1)
Dosyamı açılmış olarak birine verdim. Geldi bilgisayara oturdu. Henüz Şifreli değil. Şifre kodlarda kurulu. Bu kişi yazdı çizdi işini bitirdi. Dosyayı kapattı.
İşte kapattığı an şifrelenecek.

Kapanırken; şifre, dosya kayıt yeri vs sormayacak. Dosyanın kendisi şifrelenecek. Sadece şunu sorabilir: “Yaptığınız değişiklikleri kaydetmek istiyor musunuz?

2)
Belli süre geldiği zaman makroların çalışmasını sağlayan kodların içine, oluşturacağınız kodu yerleştireceğim. Dolayısı ile bir günlüğüne dosyayı verdiğim bir kişi, ancak bir gün dosyaya yazıp çizebilecek .

Birazdan verdiğiniz kodlarla ilgili denemeler yapmaya başlayacağım.
 
Moderatörün son düzenlenenleri:
Aktif kullandığınız dosyanın Thisworkbook (buçalışmakitabı) bölümüne aşağıdaki kodları ekleyiniz.

*** Uyarı vermeden aynı dosyanın üzerine kayıt eder.

VBA:
İçeriği görüntülemek için giriş yapmalısınız
(5 satır)
 
Gayet güzel, son bir husus kaldı;

Dosyada yapılan değişikliği (bildiğimiz şekliyle) uyarı vererek sorsa, ve biz “Kaydet” e bastıktan sonra şifreleme özelliği devreye girse, bunun için hangi satırı silmeliyiz veya eklemeliyiz?

(Yani eğer mümkünü varsa çıkışta değişikliği kaydetmeyi sorma özelliği, pasif olmasın)

(Belirtmeliyim Sn AhmetRasim hocam, bu şekilde de işimi görür)
Ama eğer oluyorsa, denemek isterim.
 
Moderatörün son düzenlenenleri:
Application.DisplayAlerts = False satırı ile Excel'e ait olan mesaj bilgilerini kapattığımız için, dosya kapanırken çıkacak mesajı biz belirleyebiliriz.

8 numaralı mesajda paylaştığım kodu aşağıdaki şekilde değiştiriniz.
VBA:
İçeriği görüntülemek için giriş yapmalısınız
(23 satır)
 
Moderatörün son düzenlenenleri:
Sayın @AhmetRasim 'in müsaadeleriyle, bir hususu hatırlatmak isterim.
O da Application.Quit kod satırıyla ilgilidir.

Şayet sadece kodların kullanıldığı excel belgesi açıksa mesele yok.
Ancak, aynı anda 1'den fazla excel belgesi açıksa, bu kod satırı sıkıntılı.
Çünkü belgeyi değil Excel uygulamasını kapatma komutu verilmiş oluyor.

O satırı; açık belge sayısı 1 ise (kodun kullanıldığı belge demektir) mevcut QUIT kodu,
açık belge sayısı 1'den büyükse de sadece aktif belgeye yönelik CLOSE kodu
şeklinde düzenlemekte yarar var bence.

.
 
Sayın @AhmetRasim 'in müsaadeleriyle, bir hususu hatırlatmak isterim.
O da Application.Quit kod satırıyla ilgilidir.

Şayet sadece kodların kullanıldığı excel belgesi açıksa mesele yok.
Ancak, aynı anda 1'den fazla excel belgesi açıksa, bu kod satırı sıkıntılı.
Çünkü belgeyi değil Excel uygulamasını kapatma komutu verilmiş oluyor.

O satırı; açık belge sayısı 1 ise (kodun kullanıldığı belge demektir) mevcut QUIT kodu,
açık belge sayısı 1'den büyükse de sadece aktif belgeye yönelik CLOSE kodu
şeklinde düzenlemekte yarar var bence.

.
Sayın hocam kod olarak yazar mısınız?
 
Sn AhmetRasim hocam merhaba

10 nolu mesajınızdaki önceki kod da, sonradan güncellediğiniz son kod da çalışıyor sorun yok. Fakat Call ile çağırmak istediğimde sonraki koddaki
Public kontrol As Byte
satırı hata veriyor. Bu satırı etkisizleştirince hiç sorun yok.

Sorum şu: Bu satırı kullanmasak bir şey olur mu?


(Ben aslında Private başlığının üstünde Public satırını ilk gördüğümde Call ile hata vereceğini tahmin etmiştim, ama önce denemeler yapayım, hata verirse ondan sonra sorarım diye düşünmüştüm)
 
Merhabalar Sn. @hakki83

Kod çağırma işlemi yapacağınızı belirtmemiştiniz.
İlk mesajınızda Workbook_BeforeClose için olabilir dediğinizden dolayı verdiğim örnek kodlarda bu yönde oldu.

--Kod çağırma için Uygulama yaptığınız dosya ve kodları paylaşır mısınız?
 
AhmetRasim hocam dosyaları hazırladım.
Call satırını siz açtığınızda devreye girmesin diye pasif yaptım. Boş kalmasın diye geçici olarak Msgbox koydum.
Bir de kodlardaki msgbox satırında küçük bir değişiklik yaptım, böyle biraz daha gerçeğe yakın oldu.
Örnekler ektedir.
 

Ekli dosyalar

Merhabalar Sn. @hakki83

-- Public ile başlayan satırlar Kod Sayfasının ilk sırasında yani en üstte bulunmalıdır.
1632993641549.webp


Public kontrol As Byte satırını kod2 bloğu içerisine yazdığınız için hata verir.

Bu satırı kullanmasak bir şey olur mu?
Sorunuzun cevabı ise;
-- Eğer kapatma kodlarını Workbook_BeforeClose ile kullanacaksanız bu satırlar gerekli.
-- Ama modül içerisinde başka bir kod bloğuda çalıştıracaksanız, kontrol kelimesi geçen satırları kullanmanıza gerek yok.
 

Ekli dosyalar

  • 1632993596657.webp
    1632993596657.webp
    3.9 KB · Görüntüleme: 4
Moderatörün son düzenlenenleri:
Sayın @AhmetRasim 'in müsaadeleriyle, bir hususu hatırlatmak isterim.
O da Application.Quit kod satırıyla ilgilidir.

Şayet sadece kodların kullanıldığı excel belgesi açıksa mesele yok.
Ancak, aynı anda 'den fazla excel belgesi açıksa, bu kod satırı sıkıntılı.
Çünkü belgeyi değil Excel uygulamasını kapatma komutu verilmiş oluyor.

O satırı; açık belge sayısı 1 ise (kodun kullanıldığı belge demektir) mevcut QUIT kodu,
açık belge sayısı 1'den büyükse de sadece aktif belgeye yönelik CLOSE kodu
şeklinde düzenlemekte yarar var bence.

.
Ömer Baran hocam öğrenebilmek için soruyorum; önceki kodlarda birden fazla açık excel belgesi varsa sıkıntı oluşturabileceğinden bahsetmiştiniz. Önceki kodlarda birden fazla açık belge olunca, kodlar içinde bulunduğu sayfayı şifrelemiyor mu? Yani kodlar yanlış mı çalışmış oluyor?
 
Konuyu başlatan
Site Üyesi
Katılım
Konu Bilgi
Durum
Çözüldü 
Forum
Excel Makro Soruları
Başlangıç tarihi
Son yanıt tarihi
Cevaplar
20
Üst