Genel Bakış
SaveSetting (SaveSetting statement), bir uygulamaya ait ayarı Windows kayıt defterindeki VBA programlarına ayrılmış bölüme yazan ya da var olan ayarı güncelleyen VBA deyimidir. Kullanıcının son seçtiği şehir, pencere konumu ya da oran gibi bilgileri çalışma kitabını kapatsanız bile saklamak için kullanılır. Kaydedilen ayar GetSetting işleviyle daha sonra geri okunur.
Ayarlar çalışma kitabının içinde değil, bilgisayarda saklanır. Dosyayı başka bir bilgisayara taşırsanız ayarlar da taşınmaz. Bilgisayardan bağımsız bir saklama istiyorsanız değerleri gizli bir sayfaya yazmak daha uygundur. Mac sürümünde ayarlar kayıt defteri yerine bir ayar dosyasında tutulur.
Makro çalıştığında üç anahtar kayıt defterindeki ExcelDestek\Rapor bölümüne yazılır. Sayfada görünür bir değişiklik olmaz; ayarları Kayıt Defteri Düzenleyicisi'nde ya da GetSetting ile görebilirsiniz. Makroyu tekrar çalıştırırsanız aynı anahtarların değerleri güncellenir, yeni anahtar eklenmez.
Kitabı kapattığınızda etkin sayfa adı ve hücre adresi kaydedilir. Kitap bir sonraki açılışta o sayfaya ve hücreye döner. Silinmiş ya da adı değişmiş bir sayfa kaydedilmişse On Error Resume Next hata iletisini engeller ve kitap olduğu gibi açılır.
Makro D sütununa her satır için kayıt yolunu yazar. İlk satırın yolu HKCU\Software\VB and VBA Program Settings\ExcelDestek\Rapor\Sehir, ikincisinin HKCU\Software\VB and VBA Program Settings\ExcelDestek\Rapor\KdvOrani, üçüncüsünün HKCU\Software\VB and VBA Program Settings\SatisTakip\Gorunum\SonSayfa olur. Görüldüğü gibi her ayar, VB and VBA Program Settings anahtarının altında uygulama, bölüm ve anahtar sırasıyla saklanır.
Söz dizimi
SaveSetting deyiminin dört bağımsız değişkeni vardır ve dördü de zorunludur:SaveSetting appname, section, key, setting
- appname: Ayarı kullanan uygulamanın ya da projenin adını içeren metin. Zorunludur, varsayılanı yoktur.
- section: Anahtarın bulunacağı bölümün adı. Zorunludur, varsayılanı yoktur.
- key: Kaydedilecek ayarın (anahtarın) adı. Zorunludur, varsayılanı yoktur.
- setting: Anahtara yazılacak değer. Zorunludur; bir ifade olabilir ve metin olarak saklanır.
Kayıt defterinde nereye yazılır
Windows'ta ayarlar şu konuma yazılır: HKEY_CURRENT_USER\Software\VB and VBA Program Settings\appname\section. Bu konum sabittir; SaveSetting ile kayıt defterinin başka bir bölümüne yazamazsınız. Ayarlar oturum açan Windows kullanıcısına özeldir, bu yüzden aynı bilgisayarda farklı kullanıcılar kendi değerlerini görür.Ayarlar çalışma kitabının içinde değil, bilgisayarda saklanır. Dosyayı başka bir bilgisayara taşırsanız ayarlar da taşınmaz. Bilgisayardan bağımsız bir saklama istiyorsanız değerleri gizli bir sayfaya yazmak daha uygundur. Mac sürümünde ayarlar kayıt defteri yerine bir ayar dosyasında tutulur.
Okuma, silme ve veri türü
Kaydedilen ayarı okumak için GetSetting, bir bölümdeki tüm anahtarları dizi olarak almak için GetAllSettings, silmek için DeleteSetting kullanılır:
VBA
3 satır
deger = GetSetting(appname, section, key, default)
SaveSetting appname, section, key, setting
DeleteSetting appname, section, key
- default: İsteğe bağlıdır; anahtar bulunamazsa döndürülecek değerdir. Belirtilmezse boş metin ("") döner.
- Veri türü: Değer her zaman metin olarak yazılır ve metin olarak okunur. Tarih ya da sayı gerekiyorsa CDate, CLng ya da CDbl ile dönüştürün; aksi durumda karşılaştırmalar metin olarak yapılır.
- Ondalık ayırıcı: Ondalıklı bir sayıyı CStr ile yazarsanız bilgisayarın bölge ayarına göre virgül ya da nokta kullanılır; farklı ayarlı bir bilgisayarda okurken dikkatli olun.
1. Sayfadaki ayarları kayıt defterine yazma
Sayfada üç ayar ve değerleri var. Kodu standart modüle (Ekle > Modül) yapıştırın. Makro her satırı okuyup ExcelDestek uygulamasının Rapor bölümüne kaydeder. Kayıt defterine yazdığı için bu örnek burada çalıştırılmaz.
VBA
13 satır
Option Explicit
Sub AyarlariKaydet()
Dim ws As Worksheet
Dim i As Long
Set ws = ActiveSheet
' 2. satırdan 4. satıra kadar her ayarı kaydeder
For i = 2 To 4
SaveSetting "ExcelDestek", "Rapor", ws.Cells(i, 1).Value, CStr(ws.Cells(i, 2).Value)
Next i
End Sub
SaveSetting
Formülünü incelemek için bir hücre seçin.| A | B | |
|---|---|---|
| 1 | Ayar Adı | Kaydedilecek Değer |
| 2 | Sehir | Ankara |
| 3 | KdvOrani | 20% |
| 4 | SonRaporTarihi | 31.03.2025 |
AyarlarExcelDepo v1.0.0
2. Kitap kapanırken son konumu saklama
Çalışma kitabı kapanırken etkin sayfa adı ve etkin hücre adresi kaydedilir, kitap açılırken geri okunur. Kodu ThisWorkbook modülüne yapıştırın. Olaylar kitabı açıp kapatmayı gerektirdiği için örnek çalıştırılmaz.
VBA
21 satır
Private Sub Workbook_BeforeClose(Cancel As Boolean)
' Kapanmadan önce son konumu kaydeder
SaveSetting "ExcelDestek", "Oturum", "SonSayfa", ActiveSheet.Name
SaveSetting "ExcelDestek", "Oturum", "SonHucre", ActiveCell.Address
End Sub
Private Sub Workbook_Open()
Dim sayfaAdi As String
Dim hucreAdresi As String
' Kayıt yoksa boş metin ve A1 döner
sayfaAdi = GetSetting("ExcelDestek", "Oturum", "SonSayfa", "")
hucreAdresi = GetSetting("ExcelDestek", "Oturum", "SonHucre", "A1")
If sayfaAdi <> "" Then
On Error Resume Next
Worksheets(sayfaAdi).Activate
Range(hucreAdresi).Select
On Error GoTo 0
End If
End Sub
SaveSetting
Formülünü incelemek için bir hücre seçin.| A | B | |
|---|---|---|
| 1 | Ayar | Anahtar |
| 2 | Son sayfa | SonSayfa |
| 3 | Son hücre | SonHucre |
OturumExcelDepo v1.0.0
3. Ayarın kayıt yolunu sayfada gösterme
Bu örnek kayıt defterine yazmaz; yalnızca verdiğiniz uygulama, bölüm ve anahtar adlarıyla SaveSetting deyiminin hangi konuma yazacağını sayfada gösterir. Kodu standart modüle yapıştırın ve çalıştırın.
VBA
14 satır
Option Explicit
Sub YolOlustur()
Dim ws As Worksheet
Dim i As Long
Set ws = ActiveSheet
' D sütununa SaveSetting'in kullanacağı kayıt defteri yolunu yazar
For i = 2 To 4
ws.Cells(i, 4).Value = "HKCU\Software\VB and VBA Program Settings\" & _
ws.Cells(i, 1).Value & "\" & ws.Cells(i, 2).Value & "\" & ws.Cells(i, 3).Value
Next i
End Sub
SaveSetting
Formülünü incelemek için bir hücre seçin.| A | B | C | D | |
|---|---|---|---|---|
| 1 | Uygulama | Bölüm | Anahtar | Ayar Yolu |
| 2 | ExcelDestek | Rapor | Sehir | HKCU\Software\VB and VBA Program Settings\ExcelDestek\Rapor\Sehir |
| 3 | ExcelDestek | Rapor | KdvOrani | HKCU\Software\VB and VBA Program Settings\ExcelDestek\Rapor\KdvOrani |
| 4 | SatisTakip | Gorunum | SonSayfa | HKCU\Software\VB and VBA Program Settings\SatisTakip\Gorunum\SonSayfa |
Ayar YoluExcelDepo v1.0.0
Kullanırken dikkat edin
- Ayarlar kitapta değil bilgisayarda saklanır: Değerler kayıt defterine yazıldığı için çalışma kitabını başka bir bilgisayara ya da başka bir kullanıcıya verdiğinizde ayarlar gelmez. Böyle durumlarda varsayılan değer verilmiş bir GetSetting çağrısı kullanın.
- Kurumsal kısıtlamalar: Bazı kurumlarda kayıt defterine yazma yetkisi kısıtlanmış olabilir; bu durumda deyim hata verir. Kritik işlemlerde On Error ile hata yönetimi ekleyin.
- Her şey metin olarak saklanır: Tarih, sayı ve mantıksal değerler metne çevrilerek yazılır. Okurken CDate, CLng, CDbl ya da CBool ile dönüştürmeyi unutmayın.
- Başka konuma yazamaz: SaveSetting yalnızca VB and VBA Program Settings altına yazar. Kayıt defterinin başka bölümlerini değiştirmek için bu deyim kullanılamaz.
- Geçersiz bağımsız değişkenler: Dört bağımsız değişkenin de verilmesi gerekir. Eksik ya da geçersiz bir bağımsız değişken çalışma zamanı hatası oluşturur. Anahtar adlarını sabit olarak tanımlarsanız yazım hatalarından kaçınırsınız.
- İlgili konular:
- GetSetting
- GetAllSettings
- DeleteSetting
- Workbook_Open ve Workbook_BeforeClose olayları
- CDate, CLng, CDbl ve CStr dönüştürme işlevleri
- On Error deyimi