Excel VBA Blog

2010-10-14

Visual Basic Projesine Erişimi Aktif Hale Getirme

Filed under: Excel, VBA — Etiketler:, , , , — dutali @ 12:03 pm

Bu yazıyı exceltr.net altında okumak için  tıklayın


 

VBA projesinin kod sayfalarının ismini değiştirmek ya da VBA editörü üzerinde manipülasyon yapmak, sayfaların kod isimlerini değiştirmek veya kodu değiştiren kod yazmak vs için kodlama yapmadan önce visual basi projesine erişimi aktif hale getirmeniz gerekir.

Normal şartlarda bu seçenek deaktiftir ve öyle de olmalıdır. Aktif hale getirmek için:

Araçlar–>Makro–>Güvenlik

.

menüsünden

Trusted Publisher (Tr: Güvenilen Yayıncılar)

sekmesini tıklayın
En altta görülen

Trusted Access to VBA Project (Tr: VBA Projesi Erişimine Güven)

kutucuğunu seçili değil ise seçili hale getirin. Şimdi program yazan program yazabilirsiniz 🙂

2010-10-13

Sayfa İsmi, Referans ismi ve VBA ile kod isminin değiştirilmesi

Filed under: VBA — Etiketler:, , , — dutali @ 6:00 pm

Bu yazıyı exceltr.net altında okumak için  tıklayın


Sayfa ismi, Excel’de çalışma sayfasında worksheet sekmelerinde gördüğünüz isimdir, Referans ismi ise VBE editöründen erişilebilen ve prosedürlerde sayfaya referans vermek için kullanılabilen isimdir.Yeni bir sayfa yarattığınızda sayfanın ismi gibi referans ismi de otomatik olarak excel tarafından verilir.Sayfa adı değiştirilse de referans adı aynı kalır. Sayfa isminde boşluk bulunabilir, türkçe karakter kullanılabilir fakat referans isminde türkçeye has karakterler ve boşluk ve sair karakterler bulunamaz.

 

Sayfa sekmeleri çubuğunda “Sayfa İsimleri”

VB Editöründe Properties penceresi. En üstteki özellik referans ismi.

Visual Basic editöründe bir sayfanın properties penceresinden özelliklerine baktğınızda sayfanın ismini Name özelliğinin değeri olduğunu görürsünüz. Referans ismi ise aynı pencerede (Name) (   Name değil (Name)) özelliğinin değeridir .Kod ismi buradan elle değiştirilebilir.

VBA içinde bu iki isim kullanılarak da sayfaya erişilebilir. Kod ismi doğrudan o sayfa objesinin ismi olduğundan doğrudan kullanılabilir. Sayfa ismini kulanmak daha dolaylı bir yol gerektiri. Mesela sayfa adını kullanarak Sayfa1 isminde ve Sayfa1Ref referans ismindeki  excel çalışma sayfasında bir hücreye;

ThisWorkbook.Worksheets(“Sayfa1”).Cells(1,1)

şeklinde, aynı hücreye referans ismi kullanarak

Sayfa1Ref.Cells(1,1)

şeklinde erişilir.

Kod içerisinde sayfa ismini kullanamanın sakıncaları çoktur. Bir ker sayfa ismi kolayca değiştirilebilir, o zaman kodun da değiştirilmesi gerekir. Sayfa isminde türkçe karakter  ve boşluk var ise dil non-unicode program dili ingilizce ayarlanmış bir windows üzerinde sorunlar yaşanır. En iyisi refrans isimlerini kullanmaktır. Fakat çok sayıda sayfa içeren bir çalışma kitabında, eğer müdahale etmemişseniz, referans isimleri ayırt etmeyi güçleştirecek bir haldedir.  Elle hepsini tek tek düzeltebilirsiniz. Sayfa isimleri ile aynı ya da yaklaşık aynı ismi vermek ya da amaca uygun isimlendirme yapmak çıkar bir yoldur.

Aşağıda çalışma kitabının referans ismini değiştiren bir kod görüyorsunuz. Mesela vba kullanarak sayfa ekleyecekseniz, sayfa isminin yanında referans ismini değiştirmek de yararlı olacaktır.

Kodu göstermeden önce: Bu kod VBA projesine erişim gerektirmektedir. Çalışabilmesi için VBA editörüne erişime izin vermelisiniz. Bunu için:

Araçlar–>Makro–&gtGüvenlik
menüsünden
Trusted Publisher (Tr: Güvenilen Yayıncılar) sekmesini tıklayın
En altta görülen
Trusted Access to VBA Project (Tr: VBA Projesi Erişimine Güven) kutucuğunu seçili değil ise seçili hale getirin.


Dim ws As Worksheet

Set ws=ThisWorkbook.Worksheets("OrnekSayfa")

ws.Parent.VBProject.VBComponents(ws.CodeName).Properties("_CodeName") = “YeniKodAd"

Şimdi bu kodu tüm çalışma sayfasındaki referans isimlerini sayfa1, sayfa2 .. şeklinde değiştiren bir hale çevirelim.


Sub ChangeCodeName()
Dim ws As Worksheet
Dim i As Integer

i = 1

' Sayaf1, Sayfa2 gibi isimler excel tarafından otomatik verildiğinden. İsim çakışması olmasın diye önce bütün sayfalara geçici referans ismi verelim
For Each ws In ThisWorkbook.Worksheets
     ws.Parent.VBProject.VBComponents(ws.CodeName).Properties("_CodeName") = "gecici" & i
     i = i + 1
Next

'Tüm sayfalara isim verelim

i=1

For Each ws In ThisWorkbook.Worksheets
  ws.Parent.VBProject.VBComponents(ws.CodeName).Properties("_CodeName") = "Sayfa" & i
  i = i + 1
Next

End Sub

WordPress.com'da ücretsiz bir web sitesi ya da blog oluşturun.