Excel VBA Blog

2016-02-02

Excel ‘de kullanıcı kontrollerini gizleme

Filed under: Excel, VBA — Etiketler:, , , , , , , — dutali @ 1:30 am

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


Bu yazıda exccel’i excel olmaktan çıkaracağız. Excel in kullanıcının erişmesini istemyebileceğiniz bazı bileşenlerini kapatacağız, bazı bileşenleri görünmez hale getireceğiz

İlk iş olarak aşağıdaki ekran görüntüsünde işaretli bileşenleri gizleyeceğiz. Bunların bir kısmını menü üzerinden gizleyebilirsiniz. Bazılarını ( kaydırma çubukları gibi) gizlemek için bir menü bulunnmaz. bunlar için VBA zorunlu. VBa kullanmadan gizlenebileceklerin menüden nasıl gizleneceği (pek ilginizi çekmese de konu bütünlüğü açısından) gizlenecek

 

İlk olarak kaydırma çubuklarından (scroll bar) başlayalım . Dikey ve yatay kaydırma çubukları gereksizse gizleyebiliriz. Örnek olarak şu sayfaya  bakalım

 

image

 

 

Şimdi dikey veyatay kaydırma çubuklarını yokedelim. Bunu gizleyecek bir menü seçeneği yok. VBA ya başvuralım

Şu kodu bir VBA modülü açıp içine ekleyin ve çalıştırın

Sub kontrolGizle()
”Dikey kaydırma çubuğunu gizler
ActiveWindow.DisplayVerticalScrollBar = False

”Yatay kaydırma çubuğunu gizler
ActiveWindow.DisplayHorizontalScrollBar = False
End Sub

Sonuç;

image

 

Şimdi menüler ile yapabileceklerimizi görelim;

Formül çubuğu, başlıklar, kılavuz çizgileri

Şeritte Görünüm seçili iken ekran görüntüsünde gördüğümüz seçenekler ile bunları kapatabiliriz

 

image

 

Aynı şeyi VBA ile yapmak için fonksiyonumuza şunları eklememiz gerekir

 

Application.DisplayFormulaBar = False
ActiveWindow.DisplayHeadings = False
ActiveWindow.DisplayGridlines = False

 

 

Dikkat! Formül çubuğunu gizlemek için Application sınıfını , kaydırma çubukları, başlıklar ve kılavuz çizgilerini gizlemek için ise  ActiveWindow sınıfını kullandık. Bu sebeple de aynı excel instance ı ile açılmış  ( eğer ikinci kere excel uygulamasını elle açmadı iseniz aynı isntance olacaktır) tüm açık excel dosyalarında formül çubuğu gizli olacak.

Diğer kapattığımız bileşenler çalışam sayfası( dosya) bazlı ya da sekme bazlı. Başlılar ve kılavuz çizgileri sadece aynı sekmede gizlenmiş olurken, kaydırma çubukları aynı çalışma kitabındaki tüm sekmelerde gizlenmiş olur

 

Çalışma sayfasının son hali şöyle

image

 

Sekme çubuğunu da gizleyelim. Bunun için de VBA koduna girmemiz gerekir

Şu satırı prosedür ile çağırın

ActiveWindow.DisplayWorkbookTabs = False

 

Durum çubuğunu gizlemek için ise

 

Application.DisplayStatusBar = Not Application.DisplayStatusBar

 

Sayfamızın son hali;

image

 

 

Şimdi sıra geldi şeride ( Excel 2003 sonrasında şerit var. Öncesinde menü. bu kod Excel 2003 sonrası için ). Onu gizleme kodu diğerlerinden biraz farklı

Application.ExecuteExcel4Macro “Show.ToolBar(“”Ribbon””,False)”

 

Son görüntü içinde bir rapor görünen dikdörtgen bir kutu

image

 

 

 

Şimdi yazdıklarımızı toparlayalım

 

Sub kontrolGizle()
” Dikey kaydırma çubuğunu gizler
ActiveWindow.DisplayVerticalScrollBar = False

” Yatay kaydırma çubuğunu gizler
ActiveWindow.DisplayHorizontalScrollBar = False

” Formül çubuğunu gizler
Application.DisplayFormulaBar = False

” Başlıkları gizler
ActiveWindow.DisplayHeadings = False

” Kılavuz çizgilerini gizler
ActiveWindow.DisplayGridlines = False

” Sekme çubuğunu gizler
ActiveWindow.DisplayWorkbookTabs = False

”Durum çubuğunu gizler
Application.DisplayStatusBar = False
”Şeridi gizler
Application.ExecuteExcel4Macro “Show.ToolBar(“”Ribbon””,False)”
End Sub

Buraya kadar tamam da bir de bunu geri alması var.Excel hep böyle kalsın istemiyorsak tabii. Onu da özetle şöyle verelim

 

 

Sub kontrolGoster()
” Dikey kaydırma çubuğunu gösterir
ActiveWindow.DisplayVerticalScrollBar = True

” Yatay kaydırma çubuğunu gösterir
ActiveWindow.DisplayHorizontalScrollBar = True

” Formül çubuğunu gösterir
Application.DisplayFormulaBar = True

” Başlıkları gösterir
ActiveWindow.DisplayHeadings = True

” Kılavuz çizgilerini gösterir
ActiveWindow.DisplayGridlines = True

” Sekme çubuğunu gösterir
ActiveWindow.DisplayWorkbookTabs = True

”Durum çubuğunu gösterir
Application.DisplayStatusBar = True

”Not Application.DisplayStatusBar

”Şeridi gösterir
Application.ExecuteExcel4Macro “Show.ToolBar(“”Ribbon””,True)”
End Sub

 

 

Görüşmek üzere

2016-01-31

Sayfa açıldığında imlecin konumunu ve büyütme oranını sıfırlama

Filed under: Excel, VBA — Etiketler:, , — dutali @ 6:24 pm

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


Her sayfa kullanıldığında fare imleci son bırakıldığı yerde kalır. Aynı şekilde büyütme oranı da son bırakıldığı haliyle kaydedilmiş olur

Sayfayı kullanan eğer fare imlecini en aşağılarda biryerde bırakmışsa veya sayfayı %500 büyütmüşse ve kaydetmişse bir seferki açtığında  da ilk göreceği son görüntülediği sayfa kısmı olacaktır

Bu tabii ki çoğu kişi için pek sorun olmayabilir. Ama profesyonel bir rapor hazırlıyorsanız sayfa her açıldığında saporun bulundupu alanın görüntülenmesi ve büyütme oranının  sizin sayfayı tasarlarken kullandıınız oran olması iyi bir etki bırakacaktır

Sayfaları tasarlarken standart bir büyütme oranı belirleyip ( En iyisi %100) diğer boyutları buna göre tasarlamanız isabetli olacaktır

Mesela şu sayfayı ilk açtığımda aşağıdaki şekilde görüyorum

image

 

Şimdi sayfanın aşaılarına doğru bir gezinip okumakta zorlandığım kısımları görmek için biraz sayfayı büyütüorum ve excel i kaydedip tekrar açıyorum

Bu sekmeyi seçtiğimde görüntü şu şekilde

image

 

 

Eh sorun değil benim için. Müdür de excel kullanmayı biliyor nasılsa.  Ama ben raporum daha profesyonel olsun istiyorum. Bunun için yapmam gereken her sayfa açıldığında imleci A1 adresine taşıyacak ve sayfa büyütme oranını %100  olarak atayacak bir VBA prosedürü yazmak. Yazması gayet kolay .Prosedür şunun gibi birşey olacak

 

Sub İmleciveBuyutmeyiSifirla()

”Aktif sayfanın scroll’unu 1a’ya getir ve büyütme oranını %100 yap”
If TypeName(Application.ActiveSheet) = “Worksheet” Then
With Application
.ScreenUpdating = False
.ActiveWindow.ScrollColumn = 1
.ActiveWindow.ScrollRow = 1
.ActiveWindow.Zoom = 100
End With
End If
Application.ScreenUpdating = True
End Sub

 

Bunu eğer sadece belirli bir sayfa için kullancaksak yapmamız gereken, ilgili sayfanın VBA kod sayfasını açıp

image

Worksheet_Activate prosedürü açmak ve bu kodu içerisine yazmak

 

Eğer tüm sayfalarda kullanacaksak çalışma kitabının VBA kod sayfasını açıp

image

 

Workbook_SheetActivate prosedürü açmak ve bu kodu içerisine yazmak olacak

 

Dikkat! Her iki durumda da başka sayfa açılıp geri gelidğinde bu prosedür gene çalışacak ve büyütme oranı ve imlecin konumunu sıfırlayacaktır.

Bunu istemiyor iseniz sayfa her açıldığında bir kereye mahsus bu kodu çalıştırın

 

Kodu direkt olarak bu prosedürlerin içine koymak yerine en üstteki prosedürü bir modüle yazıp gerekli yerlerde çağırmanız geliştirme yöntemi açısından daha uygun olacaktır

2011-02-26

Birleşik range’den dizi veya matris oluşturma

Filed under: Excel, VBA — Etiketler:, , , , — dutali @ 6:28 am

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


 

Merhaba,
Şöyle bir durum düşünün; Elinizde range türünden bir değişken var.Farzedelim kullanıcının fare imleci ile seçtiği birkaç sütunun birleşimi bir alan olsun.
Doğal olarak tek parçadan oluşmak zorunda değil. Böyle bir durumda VBA içerisinde bu alan içerisindeki değerleri ağız tadı ile kullanmak zor.
Çünkü hiç bir elemana indis kullanarak ulaşamayacaksınız. Ayrıca sonradan boyutu belirlenmiş bir değişken olan alanımızın içerisinde dolaşabilmek için önce kaç parçadan oluştuğunu sorgulamamız, sonra her alan içerisinde indis kullanmadan tüm hücreler üzerinde dolaşmak zorundasınız. 2. parçanın 3. elemanı diye bir ifade olamayacak. Parçaların satır sayılarının aynı olduğu bir durumda bir matris elde etmiş oluruz. Örneğimizde de öyle zaten

hiç bir yaratıcılık ve zeka pırıltısı içermese de çok işe yarayan fonksiyonumuz şöyle:


Function RangeToArray(rgInput As Range, Optional booTekBoyutIseArray As Boolean = False)

' Programcı: Ebubekir Çelik .
' https://exceltr.wordpress.com

    Dim i As Integer, j As Integer, k As Integer, m As Integer, n As Integer

    Dim booTekBoyut As Boolean
    Dim iColCnt As Integer, iRowCnt As Integer, iAreasCnt As Integer
    Dim GArray, cl As Object

    iColCnt = rgInput.Columns.Count
    iAreasCnt = rgInput.Areas.Count

    iRowCnt = 0
    For i = 1 To iAreasCnt
        iRowCnt = iRowCnt + rgInput.Areas(i).Rows.Count
    Next

    If iColCnt = 1 Or iRowCnt = 1 Then
        booTekBoyut = True
    Else
        booTekBoyut = False
    End If

    If booTekBoyutIseArray = False Or booTekBoyut = False Then
        ReDim GArray(1 To iRowCnt + 1, 1 To iColCnt)
        m = 2
        For k = 1 To iColCnt
            GArray(1, k) = ""
        Next
        For i = 1 To iAreasCnt
            For j = 1 To rgInput.Areas(i).Rows.Count
                n = 1
                For k = 1 To iColCnt
                    GArray(m, n) = rgInput.Areas(i).Cells(j, k)
                    n = n + 1

                Next
                m = m + 1
            Next

        Next
    Else
        ReDim GArray(1 To rgInput.Cells.Count)
        i = 1
        For Each cl In rgInput.Cells
            GArray(i) = cl.Value
            i = i + 1
        Next
    End If

    RangeToArray = GArray

End Function

TC Kimlik numarası sınama

Filed under: Excel, VBA — Etiketler:, , , , — dutali @ 6:03 am

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


 

Merhaba,

Bu yazıda size TC Kimlik numarası için bir iki basit kontrol yöntemi göstereceğim.
Sınamadan kastım resmi makamlarla bağlantı kurarak sınamak değil tabii ki. Her TC Kimlik numarasının sağladığı basit birkaç matematiksel şart var.
Bu şartlara bakarak bir sayının TC Kimlik numarası olup olamayacağını görebilirsiniz. Fakat tabii ki ilgili şartları sağlayan her sayı, bir şahsa verilmiş TC Kimlik no değildir. Biz algoritmaya uymayanları eliyoruz.

Peki ne derecede işimize yarar bu algoritma? Kafadan uydurulmuş bir numara çoook büyük olasılıkla testi geçemez. Bir iki rakamı hatalı verilmiş gerçek bir TC Kimlik numarası da çok küçük bir olasılıkla algoritmayı geçecek şansa sahip olabilir. Özellikle veri girişi hatalarını önemli ölçüde azaltacaktır.

Lafı fazla uzatmadan algoritmayı kısaca anlatayım ve fonksiyonu vereyim:
Fonksiyona, TCKimlik numarası olup olmadığı kontrol edilmek istenen sayı, string olarak veriliyor (string olacak tabii. sebebini sormayın)
TCKimlik numarası 11 haneli olmalıdır
TCKimlik numarasının son hanesi tek sayı olamaz
TCKimlik numarasının ilk 10 rakamının toplamının 10 a bölümünden kalan sayı, 11. rakamı verir
bir iki şartı daha var ama fonksiyonda yok. Talep gelirse eklerim

Ayrıca fonksiyonun altında bir de yardımcı fonksiyon var. onun amacı da stringin içinde dışında boşluklar var ise onları kırpmak. böylece temiz bir string oluşturmuş oluruz.

tc kimlik test:

Private Function TCKimlikSinama(strTc As String) As Boolean   
 ' Programcı: Ebubekir Çelik .
' https://exceltr.wordpress.com
    TCKimlikSinama = True
    If Len(strTc) = 0 Then
        TCKimlikSinama = True
        Exit Function
    End If

    If Len(strTc)  11 Then
        TCKimlikSinama = False
        Exit Function
    End If


    Dim iTop As Integer, i As Integer
    iTop = 0
    For i = 1 To 10
        iTop = iTop + CInt(Mid(strTc, i, 1))
    Next


    If iTop Mod 10  CInt(Right(strTc, 1)) Then
        TCKimlikSinama = False
        Exit Function

    End If

    If CInt(Right(strTc, 1)) Mod 2 = 1 Then
        TCKimlikSinama = False
        Exit Function
    End If

End Function

metin içerisindeki boşluk karakterlerini kırpmak için :

Function BoslukKirp(str As String) As String

    Dim i As Integer
    Dim strKr As String, strLeft As String, strRight As String
    Dim strBosluk As String
    Dim iLngt As Integer

    strBosluk = " "
    strLeft = ""
    strRight = ""

    iLngt = Len(str)

    If Len(str) > 0 Then
        For i = 2 To iLngt
            If Mid(str, i, 1) = strBosluk Then
                strLeft = Left(str, i - 1)
                strRight = Mid(str, i + 1)
                str = strLeft & strRight
                iLngt = iLngt - 1

            End If
        Next

    End If

    BoslukKirp = str
End Function

2010-10-15

Metin Kutusuna Girişi Sınırlama-1

Filed under: VBA — Etiketler:, , , , , , , , — dutali @ 4:39 am

 

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


[Örnek dosyayı indirmek için sayfanın en altına bakın]

 

Excel userform da metin kutularının (textbox) kullanım amacına göre girilmesi istenen veri için çeşitli şartları sağlaması beklenebilir. Mesela isim girilsin diye oluşturulmuş bir metin alanına rakam girilmemesi beklenir, ya da bir ürünün adetinin girileceği alana harf girilmemesi beklenir. Bunun yanında girilen metnin uzunluğunun da belli bir değerin üstünde olmaması ya da belli bir uzunluktan az veya çok olmaması istenebilir.E-posta veya telefon numarasında olduğu gibi belli bir motifte giriş yapılması da beklenebilir. Fakat işler beklentilerle yürümez. Kullanıcı ne kadar dikkatli de olsa zaman zaman hatalar vukuu bulabilir. Şahsen ben prosedür gereği doldurmam gerektiğinde, e-posta alanlarını kafadan atmaya meyilliyim. Ama karşı taraf için alanların doğruluğu hayati önem taşıyabilir. Eğer verilrle sayısal işlem de yapılacak ise özellikle giriş hatası istenmez. Bu sebeplerle girişlerin doğru olması için dua etmek yerine, veya her tarafa uyarı yazıları koymak yerine, girişlerin teknik anlamda doğru olduğunu siz garanti etmelisiniz.

Başlayalım;

Diyelim ki giriş alanımız isim için ayrılmış. Kullanıcının ismi herhangi bir uzunlukta olabilir. (Çok önemsiyorsanız: bkz)Fakat sadece metin olması gerektiğine eminsiniz. Peki bunu nasıl sağlayabilirsiniz:

-Kullanıcıya uyarı yazıları çıkartarak (böylece hatalı girişlerin büyük ihtimalle dikkatsizlik sonucu olduğunu düşünebilirsiniz)

-Metin kutusundan çıkıldığı anda veya metin kutusuna bir karakte girildiği anda kontrol ederbilirsiniz

Doğal olarak bizim ilgi alanımız ikincisi. Userform üzerinde birçok metin alanı, düğme vs varsa kullanıcı bazen fare imleci ile, bazen de tab tuşu ile başka alanlara geçebilir. Ya da kulanıcı girişini tamamladığında otomatik olarak başka alana geçiliyordur ya da enter tuşu gibi bir tuş ile bu sağlanıyordur. Geçiş şekillerinin çeşidi çok. Eğer en sonda kontrol yapacaksanız her bir geçiş olayı için kod yazmanız gerekir. En iyisi her karakter girildiğinde kontrolü yapmak.

Diyelim ki her karakter girildiğinde kontrol yaptık. Rakam girildi ise ne yapalım?”Giriş hatalı, baştan girin” uyarısı çıkarmak çok iyi bir çözüm olmaz.En iyisi hiç rakam girilemesin. Kullanıcı, rakamlara bastığında metin kutusuna etkisi olmasın.

Bunu kontrol için IsNumeric fonksiyonunu kullanabiliriz. Kullanıcıya giriş için bir engel koymayacağız, eğer rakam girer ise biz o rakamı hemen silerek o tuşa basmamış gibi bir durum yaratacağız.Bunu yaparken giriş yapılan karakterin son karakter olmayabileceğini unutmayacağız.

Bir ayrıntı daha ; kullanıcı kopyala yapıştır yaparak da isim yazabilir. Yani aynı anda birkaç karakter girebilir

Bu sebeple ve başka sakıncaları sebebiyle her bir tuşa basıldığında basılan tuşu kontrol etmek iyi bir çözüm olmaz

Bütün bunların nihayetinde rakam dışında diğer karakterlerin girilmesine izin verdik. Şimdi bu kontrolü yapan birşeyler yazalım


Private Sub TextBox1_Change()

Dim i As Integer

Dim str As String

With TextBox1

For i = 1 To Len(TextBox1.Text)

str = Mid(.Text, i, 1)

If IsNumeric(str) And .Value <> vbNullString Then

.Text = Mid(TextBox1.Text, 1, i - 1) & Mid(TextBox1.Text, i + 1)

End If

Next

End With

End If

End Sub

Bu kodu her metin kutusunun Change olayına tekrardan yazmak yerine fonksiyona çevirelim


Private Sub SadeceMetin(obj)
' Programcı: Ebubekir Çelik .
' https://exceltr.wordpress.com
Dim i As Integer

Dim str As String

If TypeName(obj) = "TextBox" Then

With obj

For i = 1 To Len(obj.Text)

str = Mid(.Text, i, 1)

If IsNumeric(str) And .Value <> vbNullString Then

.Text = Mid(obj.Text, 1, i - 1) & Mid(obj.Text, i + 1)

End If

Next

End With

End If

Eveet oldu. Bunun kullanımı da şöyle olacak;


Private Sub TextBox1_Change()

SadeceMetin TextBox1

End Sub

Şimdi de sadece sayıya izin veren bir fonksiyon yazalım. Tamamen aynı yöntemle;


Sub SadeceSayi(obj)

'Userform metin kutusuna sadece rakam girilmesine izin verir

'Kodlayan: Ebubekir Çelik

Dim i As Integer

Dim str As String

If TypeName(obj) = "TextBox" Then

With obj

For i = 1 To Len(obj.Text)

str = Mid(.Text, i, 1)

If Not IsNumeric(str) And .Value <> vbNullString Then

.Text = Mid(obj.Text, 1, i - 1) & Mid(obj.Text, i + 1)

End If

Next

End With

End If

End Sub

Kulanımı da gene aynı


Private Sub TextBox2_Change()

SadeceSayi TextBox2

End Sub

Kaynak kod

Dizinin bir sonraki yazısında kısıtlamaları daha da arttıracağız ; E-posta, iban, telefon numarası gibi belli bir motifi olan veya uzunluğu belli bir değerdeki alanlara bakacağız.

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 Blog Oluşturun.