• DİKKAT

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

Type mismatch hatası

Katılım
29 Eylül 2007
Mesajlar
136
Excel Vers. ve Dili
Microsoft Office Professional Plus 2026 - Türkçe
Selamlar,

Aşağıdaki kodda nere hata yapıyorum yardımcı olabilirseniz sevinirim.

Teşekkürler

Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, [F61]) Is Nothing Then Exit Sub
        Application.ScreenUpdating = False
        
        Sheets("GOZETIM").Range("P1").Value = Range("F202").Value
        Sheets("YUKLEME NOTASI").Range("P1").Value = Range("F202").Value
        Sheets("COMMERCIAL").Range("DJ1").Value = Range("F375").Value
        Application.ScreenUpdating = True
        
        Dim X As Integer
                
        X = Range("F61").Value
        
        If X = "" Then
        Rows("62:164").EntireRow.Hidden = True
        Application.ScreenUpdating = True
        End If
                
        If X > "0" Then
        Rows("( 164 - X ):164").EntireRow.Hidden = False
        Rows("62:( 62 + X )").EntireRow.Hidden = True
        Application.ScreenUpdating = True
        End If
                
        Application.ScreenUpdating = True

End Sub
 
slm

X değeri sayısal görünüyor.(integer).. karakter ifade ile kontrol veya şart yapmaz
 
Hocam hiç birşey anlamadım, aslında makrodan da anlamıyorum ama herşeyi sormaktansa sağdan soldan toparladığımla birşeyler yapmaya çalışıyorum. Ben F61 hücresine yazılan rakama göre 62 ve 164 satırları arasının şartlı gizlenmesini sağlamaya çalışıyorum.

Yardımcı olabilirseniz sevinirim.

Teşekkürler,
 
Merhaba,
Kodu aşağıdaki gibi kullanın. İki yerde düzenleme yaptım.
1.'si: Dim X As Integer tanımlamasını sildim. Bu tanımlamayı kullanacaksınız. X= "" yerine X= 0 yazmalısınız.
2. düzenleme kod üzerindeki mavi alan. Bu bölümdeki hatanızı iyi inceleyin.
Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, [F61]) Is Nothing Then Exit Sub
        Application.ScreenUpdating = False
        
        Sheets("GOZETIM").Range("P1").Value = Range("F202").Value
        Sheets("YUKLEME NOTASI").Range("P1").Value = Range("F202").Value
        Sheets("COMMERCIAL").Range("DJ1").Value = Range("F375").Value
                
        X = Range("F61").Value
        
        If X = "" Then
        Rows("62:164").EntireRow.Hidden = True
        End If
                
        If X > 0 Then
        Rows([COLOR="navy"]164 - X & ":164"[/COLOR]).EntireRow.Hidden = False
        Rows[COLOR="Navy"]("62:" & 62 + X)[/COLOR].EntireRow.Hidden = True
        End If
                
        Application.ScreenUpdating = True
End Sub
 
slm

şöyle söyleyebilirim

dım x as integer ifadesi ile
f61 girilen değerin tam sayı olması gerektiği kaideye bağlanmış...
dolayısıyla f61 e sayısal olmayan değer girildiğinde tip uyuşmadığından hata verir.. integer ifadelerde kontroller veya şartlar tırnak içinde yazılmaz.
tam sayı değerler olmalı... macro bilmiyorsan ezbere bir şeyler yapıp denemek zor olacak.. biraz temel olsa götürürsün...

1-) önce
dim x as integer ifadesini sil bir bak çalışıyormu.
2-) çalışmıyosa
dim x as integer ifadesini dim x as string yap (karakter ifadeler)
3) çalışmazsa
dim x as integer tekrar kalsın.alttaki

if x="" then ifadesinde "" tırnak yerine 0 (sıfır) yaz
If x > "0" Then ifadesideki "0" yerine 0 (sıfır) yaz

böylece f61 deki ifadeleri tam sayı olarak algılanır 0= veya 0> tamsayı
değerler işlem yapar...
anlatabildiysem...
 
Yardımlarınız bilgilendirme için çok teşekkür ederim.

Aynı sayfada aynı şekilde F192 nolu hücredeki değere göre de 193 - 295 satırları arasını şartlı olarak gizlemek istiyorum, bunun için ne yapmam gerekiyor
F61 nolu hücre için aşağıdaki kod gayet güzel çalışıyor.

Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, [F61]) Is Nothing Then Exit Sub
        Application.ScreenUpdating = False
        
        Sheets("GOZETIM").Range("P1").Value = Range("F202").Value
        Sheets("YUKLEME NOTASI").Range("P1").Value = Range("F202").Value
        Sheets("COMMERCIAL").Range("DJ1").Value = Range("F375").Value
                
        X = Range("F61").Value
              
        If X >= 0 And X <= 100 Then
        Rows("62:165").EntireRow.Hidden = False
        Application.ScreenUpdating = True
        Rows(65 + X & ":164").EntireRow.Hidden = True
        Application.ScreenUpdating = True
        End If
                             
        X = Range("F61").Value
                
        If X > 100 Then
        Rows("62:165").EntireRow.Hidden = False
        Application.ScreenUpdating = True
        Rows("63:164").EntireRow.Hidden = True
        Application.ScreenUpdating = True
                
        X = Range("F61").Value
        
        End If
           
        If X = "" Then
        Rows("62:165").EntireRow.Hidden = False
        Application.ScreenUpdating = True
        Rows("63:164").EntireRow.Hidden = True
        Application.ScreenUpdating = True
        End If
                 
        Application.ScreenUpdating = True

End Sub
 
Merhaba,
Gereksiz bir çok satır kullanmıştınız, onları sildim. Örneğin:Application.ScreenUpdating = False satırını kodların başında bir defa kullanmanız yeterli. Ayrıca aynı işlemi yaptıracağınız işlemlerde iki ayrı if kullanmanıza gerek yok "Or" kullanarak bu işi kısaca halledebilirsiniz. Or kullandığım kısmı inceleyin. Kodları ne kadar sade yazarsanız o kadar rahat edersiniz.
NOT: Örnek dosyanız olmadığı için kodu deneme şansım olmadı. Hata olursa lütfen beni kınamayın.
Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, [F61,F192]) Is Nothing Then Exit Sub
        Application.ScreenUpdating = False
        
        Sheets("GOZETIM").Range("P1").Value = Range("F202").Value
        Sheets("YUKLEME NOTASI").Range("P1").Value = Range("F202").Value
        Sheets("COMMERCIAL").Range("DJ1").Value = Range("F375").Value
                
        X = Target
        If Target.Address(False, False) = "F61" Then
        Satilk = 62: Satson = 165
        Else:
        Satilk = 193: Satson = 295
        End If
              
        If X >= 0 And X <= 100 Then
        Rows(Satilk & ":" & Satson).EntireRow.Hidden = False
        Rows(Satilk + 3 + X & ":" & Satson - 1).EntireRow.Hidden = True
        End If
                
        If X > 100 Or X = "" Then
        Rows(Satilk & ":" & Satson).EntireRow.Hidden = False
        Rows(Satilk + 1 & ":" & Satson - 1).EntireRow.Hidden = True
        End If
        
        Application.ScreenUpdating = True
End Sub
 
Geri
Üst