• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

Makro kodunun formül değerini görmemesi

  • Konbuyu başlatan Konbuyu başlatan xternet
  • Başlangıç tarihi Başlangıç tarihi

xternet

Altın Üye
Katılım
12 Kasım 2004
Mesajlar
462
Excel Vers. ve Dili
2010 Tr
Merhaba Arkadaşlar.

Aşağıdaki kodları incelerseniz g yazan satır ve sütunları gizlediğini görürsünüz. Ancak buradaki kodlar sadece hücrede direk "g" yazınca çalışıyor. Bir formül ile "g" yazan hücrelerde çalışmıyor. Şöyleki; gizlemem gereken satır sayısı fazla olduğu için tümüne tek tek "g" yazmak yerine, boş hücrelere bağlı olarak ilgili hücrelere g yazdırıyorum. Örneğin B10 hücresine =eğer(c10="";"g";"") diyorum. böylece C10 boş olduğunda B10 da "g" yazıyor ama "g" yazılışı formül ile oluştuğu için makro bu satırı görmüyor.
Bu sorunu nasıl çözebilirim.


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Application.CutCopyMode = xlCut Then Application.CutCopyMode = False
End Sub
Sub Satır_Gizle()
Application.ScreenUpdating = False
Rows.Hidden = False
For Each elm In [c:c].SpecialCells(xlCellTypeConstants, 23)
If elm.Value = "g" Then elm.EntireRow.Hidden = True
Next
Application.ScreenUpdating = True
End Sub
Sub Satır_Ac()
Rows.Hidden = False
End Sub
Sub Sütun_Gizle()
Application.ScreenUpdating = False
Columns.Hidden = False
For Each elm In [2:2].SpecialCells(xlCellTypeConstants, 23)
If elm.Value = "g" Then elm.EntireColumn.Hidden = True
Next
Application.ScreenUpdating = True
End Sub
Sub Sütun_Ac()
Columns.Hidden = False
End Sub


İyi çalışmalar.
 
Sütun_gizle prosedürünüzü aşağıdaki ile değiştirerek deneyin.

Kod:
Sub Sütun_Gizle()
[B][COLOR=red]Dim elm As Range[/COLOR][/B]
Application.ScreenUpdating = False
Columns.Hidden = False
For Each elm In [2:2].SpecialCells(xlCellTypeConstants, 23)
If elm.Value = "g" Then elm.EntireColumn.Hidden = True
Next
Application.ScreenUpdating = True
End Sub
 
For Each elm In [2:2].SpecialCells(xlCellTypeConstants, 23)

bu satırda hata verdi.
 
Bu satırda hatayı ancak 2 nolu satırda hiç "g" yoksa ancak verir.
 
Hocam bir hücreye el ile g yazdım ve makroyu çalıştırdım. Makro hata vermedi ve g yazdığım sütunu gizledi ama formül ile yazılmış olan g sütunlarını gizlemedi.
 
Selamlar,

Sn. leventm beyin önerdiği kodu aşağıdaki şekilde değiştirip denermisiniz.

Kod:
Sub Sütun_Gizle()
    Dim Alan As Range
    Application.ScreenUpdating = False
    Columns.Hidden = False
    For Each Alan In [2:2].SpecialCells([B][COLOR=blue]xlCellTypeFormulas, 2[/COLOR][/B])
    If Alan.Value = "g" Then Alan.EntireColumn.Hidden = True
    Next
    Application.ScreenUpdating = True
End Sub
 
Tamam sorun şimdi anlaşıldı. Aşağıdaki şekilde deneyin. Kod içindeki .SpecialCells(xlCellTypeConstants, 23) tanımlaması kaldırılmıştır.


Kod:
Sub Sütun_Gizle()
Dim elm As Range
Application.ScreenUpdating = False
Columns.Hidden = False
For Each elm In [2:2]
If elm.Value = "g" Then elm.EntireColumn.Hidden = True
Next
Application.ScreenUpdating = True
End Sub
 
Sayın Leventm şimdi tam oturdu. Bir de bunun satır gizleme için olanını ekleyebilirseniz. Şimdiden teşekkürler.
 
Sayın Leventm şimdi tam oturdu. Bir de bunun satır gizleme için olanını ekleyebilirseniz. Şimdiden teşekkürler.

Satır için [2:2] yerine sütun adını (örneğin [a:a] gibi), entirecolum yerine entirerow, columns yerinede rows yazın.
 
Teşekkürler Sayın Levetm. Zihninize sağlık.

İyi çalışmalar.
 
Sayın leventm yazdığınız kod deneme için yaptığım çalışma kitabunda sorunsuz çalışıyor ama kullanacağın çalışma kitabına uyguladığımda hata veriyor ve
If elm.Value = "g" Then
kısmı sarı gözüküyor. Acaba sebebi nedir?

Sub Satır_Gizle()
Dim elm As Range
Application.ScreenUpdating = False
Rows.Hidden = False
For Each elm In [a:a]
If elm.Value = "g" Then elm.EntireRow.Hidden = True
Next
Application.ScreenUpdating = True
End Sub
 
Selamlar,

Uyguladığınız dosyanızın küçük bir örneğini eklermisiniz.
 
Sayın COST_CONTROL;
Örnek dosyayı hazırlarken g'yi yazdırdığım formülde eksik harf girdiğimi farkettim. Formül sonucunun bulunduğu hücre okunamayacak kadar dar olduğundan gözümden kaçmış.
Sonuç olarak benden kaynaklanan bir hataymış. Düzeltince sorun ortadan kalktı ve şimdi kod çalışıyor. İlginiz için teşekkür ederim.
İyi geceler. İyi çalışmalar.
 
Merhaba arkadaşlar.

Sub Satır_Gizle()
Application.ScreenUpdating = False
Rows.Hidden = False
For Each elm In [b:b].SpecialCells(xlCellTypeConstants, 23)
If elm.Value = "g" Then elm.EntireRow.Hidden = True
Next
Application.ScreenUpdating = True
End Sub

Bu yazmış olduğum kod bu başlık altında oluşturulmuştu. Uzun zamandırda kullanıyorum. Ancak şöyle bir sorunum var.

Kodun çalışması gereken örneğin b sütununda 5 ila 55. satırlar arası. Diğer satırlara bakması gerekmiyor. Sanırım formül B sütununun tamamını taradığı için işlem oldukça uzun sürüyor. 3-4 dakika kadar. Bu durumu aşmak için B sütununun tamamını değilde gereken bir aralığı nasıl taratırız.
 
Merhaba arkadaşlar.
Sorum gözden kaçtı sanırım. Bir kez daha bakmanızı rica ediyorum.
İyi sahurlar.
 
Selamlar,

Kullandığınız kod aşağıdaki şekilde değiştirip denermisiniz.

Kod:
Option Explicit
 
Sub Satır_Gizle()
    Dim Hücre As Range
    
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
 
    Rows.Hidden = False
 
    For Each Hücre In Range("B5:B55")
        If Hücre.Value = "g" Then Hücre.EntireRow.Hidden = True
    Next
 
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
 
    MsgBox "İşleminiz tamamlanmıştır.", vbInformation
End Sub
 
Malesef sorunumu çözemedim Korhan Bey. Kod çalışıyor. Orda sorun yok ama süreyi kısaltamadım. İşlem öncekinde olduğu gibi yaklaşık 4-5 dakika sürüyor.
Yalnız şöyle bir durumda var. Her iki kod da (yani önceki ve şimdiki) başka bir dosyada yaklaşık 30-40 saniyede işlemi bitiriyor. Farklılığı oluşturan sebep ne olabilir acaba?
 
Selamlar,

Dosyanızın içeriğini bilemediğim için sadece tahmin yolu ile cevaplamaya çalışacağım.

Dosyanızda aşırı formülleme kullanmış olabilirsiniz.
Makro çalışırken sayfanın arka planında çalışan bir başka kodu tetiklemiş olabiliriz.

Üstteki mesajımdaki koda hesaplamayı manuele alan kod satırı ekledim. Bir deneyin bakalım hızlanacakmı.
 
Korhan Bey çözüm mükemmel. 4-5 dakika süren işlem inanılmaz bir hızla 4-5 saniyede tamamlandı. Harkulade gerçekten. Zihninize sağlık.
 
Geri
Üst