• DİKKAT

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

Worksheetfunction sınıfı fonksiyonların VBA da çalışmaması

Deniz_Excel

Altın Üye
Katılım
15 Mart 2016
Mesajlar
134
Excel Vers. ve Dili
MS Excel 2016
Arkadaşlar merhaba,

Linkte attığım excelde modülde aşağıdaki kod yazılı. Ancak çalıştırdığımda kod çalışmıyor. Ve bu uyarıyı alıyorum.
Sub or Function not defined
Nerede hata yapıyorum?

Excel link: https://s5.dosya.tc/server7/469qn8/Search_function.xlsm.html

Sub formulas()
If WorksheetFunction.IsNumber(Search("HIGH", Sheets("Sheet1").Range("G5"))) = True Then
Sheets("Sheet1").Range("H5") = 1
Else
Sheets("Sheet1").Range("H5") = 0
End If
End Sub
 
Merhaba.
Aşağıdaki alternatif yöntemi deneyebilirsiniz.
Kod:
Sub formulas()
    Dim Bul As Range
    With Sheets("Sheet1")
        Set Bul = .Range("G5").Find(what:="HIGH", LOOKAT:=xlPart)
        If Bul Is Nothing Then
            .Range("H5") = 0
        Else
            .Range("H5") = 1
        End If
    End With
End Sub
 
Son düzenleme:
Merhaba.
Aşağıdaki alternatif yöntemi deneyebilirsiniz.
Kod:
Sub formulas()
    Dim Bul As Range
    With Sheets("Sheet1")
        Set Bul = .Range("G5").Find(what:="HIGH", LOOKAT:=xlPart)
        If Bul Is Nothing Then
            .Range("H5") = 0
        Else
            .Range("H5") = 1
        End If
    End With
End Sub
TEşekkür ederim Muzaffer Bey. Bu yolla yapmak benimde aklımdaydı ancak yukarıdaki kodun çalışmamasının nedenini bulamassam çıldıracağım :) Hiç bir neden göremiyorum.
 
Merhaba,
Kod:
WorksheetFunction.Search
şeklinde olabilir.
 
Ben 2007 türkçe kullanıyorum, şu şekilde hata vermedi:
Kod:
Sub formulas()
If WorksheetFunction.IsNumber(WorksheetFunction.Search("HIGH", Sheets("Sayfa1").Range("G5"))) = True Then
Sheets("Sayfa1").Range("H5") = 1
Else
Sheets("Sayfa1").Range("H5") = 0
End If
End Sub
 
Arkadaşlar merhaba,

Linkte attığım excelde modülde aşağıdaki kod yazılı. Ancak çalıştırdığımda kod çalışmıyor. Ve bu uyarıyı alıyorum.
Sub or Function not defined
Nerede hata yapıyorum?

Excel link: https://s5.dosya.tc/server7/469qn8/Search_function.xlsm.html

Sub formulas()
If WorksheetFunction.IsNumber(Search("HIGH", Sheets("Sheet1").Range("G5"))) = True Then
Sheets("Sheet1").Range("H5") = 1
Else
Sheets("Sheet1").Range("H5") = 0
End If
End Sub

Öncelikle Search fonksiyonunun kullanım şekli yanlış. Bu fonksiyon, Excel'in yerleşik fonksiyonlarından MBUL'un karşılığıdır. Kullanım şeklide worksheetfunction.search(....) şeklindedir. MBUL fonksiyonu sayfa üzerinde kullanıldığında eğer aranan metni bulamazsa #DEĞER! hatası verir. Bu hatanın VBA içinde kontrolü içinde sizin yaptığınız gibi isnumber yada iserror gibi fonksiyonları kullanmak yeterli değildir ve sonuçta yine hata verecektir. Bunun yerine aşağıda verdiğim gibi hata kontrolü yaparak sonuca ulaşabilirsiniz. Eğer hata kontrolü yapmak istemezseniz InStr fonksiyonunuda kullanabilirsiniz.

Kod:
Sub formulas()
On Error Resume Next
bul = WorksheetFunction.Search("HIGH", Sheets("Sheet1").Range("G5"))
If Err = 0 Then
Sheets("Sheet1").Range("H5") = 1
Else
Sheets("Sheet1").Range("H5") = 0
End If
End Sub

Ya da

Kod:
Sub formulas()
if Instr(Sheets("Sheet1").Range("G5"),"HIGH")>0 then
Sheets("Sheet1").Range("H5") = 1
Else
Sheets("Sheet1").Range("H5") = 0
End If
End Sub
 
Son düzenleme:
Levent Bey çok teşekkürler. Bu sorunu da çözdüm sayenizde. Ayrıca problem benim Search ifadesinde buldurduğumu True ya eşitlememden de kaynaklanyormuş. >0 deyip sizin error kontrolünüzü de kombine edince sorun kalmadı.

Akabinde bir merakım daha var. VBA da kimi fonksiyonlar (Vlookup,İndex,countifs) vb gibi worksheetfunction ifadesi başta yazarak çalıştırabiliyorken kimileri (Len,Left,Right,Mid,Trim gibi) yanlız başına direk yazınca çalışıyor. Bu 2 grup fonksiyon arasında ne fark var? Sonuçta 2 gruptakilerde excelin yerleşik fonksiyonlarından.
 
Workssheetfunction ile yazılmayanlar VBA da bulunan fonksiyonlardır.
kod kısmında VBA yazıp nokta ya basarsanız fonksiyonlar listelenir.
Örnek: VBA.Trim
 
Geri
Üst