Fonksiyon Kullanımı

Katılım
15 Aralık 2008
Mesajlar
17
Excel Vers. ve Dili
2000 - Türkçe
Merhaba,

Sonuç döndürmeyen sadece çağrıldığı zaman seçili hücrelerle ilgili bir işlem yapan fonksiyon yazmak istiyorum.

Mesela

Makro'da sürekli kullanıcı tercihlerine göre farklı isimlerdeki range'ler veya hücre'ler seçilerek bu aralıklara tablo çizgileri oluşturuluyor. Bunu yapmak için
örnek olarak ;
ActiveSheet.Range(Range("a"), Range("b")).Select diyerek a ile b aralığını seçip
sonra tablo yazdırma kodlarını giriyorum.
Bu kod

Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone

With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With

..... diye gidiyor ve her seçili alan aralığı için aynı stili uyguluyorum yani aynı kodu.

Ben bu kodu her defasında .select ile hücre aralığı seçtikten sonra tekrar tekrar yazmak istemiyorum.
Bunun için bir kez function border() diye bir fonksiyon tanımladım ve altına border çizdiren bu kodları yazdım.

Fakat asıl kod içerisinde nasıl çağıracağımı bir türlü bulamadım çünkü eğer


border (ActiveSheet.Range(Range("a"), Range("b")).Select) yaparsam hata veriyor ve istediğimi gerçekleştirmiyor

border(Range(Range("a"), Range("b")).Select) yaparsam istediğimi gerçekleştiriyor ama aynı zamanda hata uyarısı da veriyor..

Sorum .select ile çalışırken bu seçili hücreleri fonksiyona nasıl yollayacağım ?


Daha pratik olarak şu kod nerede hatalı onu söyleyebilirseniz ben kendime uyarlayabilirim

Sub den()

deneme (Range(Range("A1"), Range("A5")).Select)
End Sub
'----
Function deneme()


With Selection.Interior
.ColorIndex = 6
.Pattern = xlSolid
End With
End Function
'----
 
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
Function değil ama bir prosedür'le bu işlemi yapabilirsiniz.

Aşağıdaki kodları standart bir modul sayfasına kopyalayınız ve Secilen_Araliga_Cerceve_Ekle makrosunu çalıştırınız.

Seçilen aralıktaki tüm hücrelere tüm çerçeve çizgilerini ekler ... Siz, Private prosedürü değiştirerek veya döngü koşullarını değiştirerek istemediğiniz çizgileri çizdirmeyebilirsiniz.

Kod:
Sub Secilen_Araliga_Cerceve_Ekle()
    
    Dim rngSecim As Range
    Dim oCizgi As Border
    
    Set rngSecim = Union(Range("A1:A10"), Range("B4:C10"))
    
    For Each oCizgi In rngSecim.Borders
    
        Call Cerceve_Olustur(oCizgi)
    
    Next
    
    Set rngSecim = Nothing
End Sub
'--------------------------
Private Sub Cerceve_Olustur(ByRef oCizgi As Border)
    
    With oCizgi
        .LineStyle = xlNone
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
 
End Sub
 
Katılım
15 Aralık 2008
Mesajlar
17
Excel Vers. ve Dili
2000 - Türkçe
teşekkürler...
 
Üst