• DİKKAT

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

Kendi fonksiyonumdaki hata nedir?

Katılım
23 Ağustos 2022
Mesajlar
40
Excel Vers. ve Dili
Excel 360 TR
Merhabalar,

bir tablo hazırlıyorum ve istediğim şeyi sıradan excel komutlarını yapamayınca tamam, kendim yapayım dedim ve başaramadım. kod, bir hücredeki text'i(hazır mı değil mi olarak kontrol ediyor), başka bir hücrede modele başka bir hücrede ise adet kontrolü yapıp kontrol ettiği adet miktarını kodda belirttiğim hücrelere atıyor(eğer çalışsaydı). Yazdığım fonksiyon aşağıdaki gibidir, yardımcı olabilirseniz çok sevinirim.

Function hazircheck(haz As Range, model As Range, adet As Range)

Set s1 = Sheets("Üretim Takip")
Set s2 = Sheets("Stok Takip")

If haz = "HAZIR" And model = "HCU-250" Then
s2.Range("A3") = adet
s2.Range("D7") = adet


ElseIf haz = "HAZIR" And model = "HCU-250E-500" Then
s2.Range("B3") = adet
s2.Range("F7") = adet

ElseIf haz = "HAZIR" And model = "HCU-250E-750" Then
s2.Range("C3") = adet
s2.Range("F7") = adet

ElseIf haz = "HAZIR" And model = "HCU-250WH" Then
s2.Range("D3") = adet
s2.Range("D7") = adet


ElseIf haz = "HAZIR" And model = "HCU-400" Then
s2.Range("E3") = adet
s2.Range("E7") = adet

ElseIf haz = "HAZIR" And model = "HCU-400WH" Then
s2.Range("H3") = adet
s2.Range("E7") = adet


ElseIf haz = "HAZIR" And model = "HCU-400E-1000" Then
s2.Range("F3") = adet
s2.Range("G7") = adet


ElseIf haz = "HAZIR" And model = "HCU-400E-1250" Then
s2.Range("G3") = adet
s2.Range("G7") = adet

Else
s2.Range("B5") = "iptal"

End If

End Function
 
Bildiğim kadarıyla KTF yani kullanıcı tanımlı fonksiyon girildiği hücrede sanki excelin yerleşik fonksiyonuymuş gibi sonuç belirtir. Siz ise bu kodlarda Stok Takip sayfasındaki farklı hücrelere veri girmeye çalışıyorsunuz. Ayrıca hazircheck fonksiyonunun hangi sonucu vereceğini de KTF'de belirtmemişsiniz.

Bu şekilde başka hücrelerde işlem yapmak için KTF değil makro kullanmalısınız.

Ya da bu belirttiğiniz işlemleri yerleşik formüllerle yapmalısınız.

Eğer örnek dosya paylaşırsanız farklı çözümler bulunabilir.
 
Bildiğim kadarıyla KTF yani kullanıcı tanımlı fonksiyon girildiği hücrede sanki excelin yerleşik fonksiyonuymuş gibi sonuç belirtir. Siz ise bu kodlarda Stok Takip sayfasındaki farklı hücrelere veri girmeye çalışıyorsunuz. Ayrıca hazircheck fonksiyonunun hangi sonucu vereceğini de KTF'de belirtmemişsiniz.

Bu şekilde başka hücrelerde işlem yapmak için KTF değil makro kullanmalısınız.

Ya da bu belirttiğiniz işlemleri yerleşik formüllerle yapmalısınız.

Eğer örnek dosya paylaşırsanız farklı çözümler bulunabilir.

valla altın üye olmaya çalıştım dosya paylaşmak için ama id/şifremi kabul etmedi size dosyayı atmaya çalışacaktım
 
Altın üyelik için kullanılan sistem siteden faklı, orda ayrı kullanıcı oluşturmanız gerekiyor galiba.
 
Bildiğim kadarıyla KTF yani kullanıcı tanımlı fonksiyon girildiği hücrede sanki excelin yerleşik fonksiyonuymuş gibi sonuç belirtir. Siz ise bu kodlarda Stok Takip sayfasındaki farklı hücrelere veri girmeye çalışıyorsunuz. Ayrıca hazircheck fonksiyonunun hangi sonucu vereceğini de KTF'de belirtmemişsiniz.

Bu şekilde başka hücrelerde işlem yapmak için KTF değil makro kullanmalısınız.

Ya da bu belirttiğiniz işlemleri yerleşik formüllerle yapmalısınız.

Eğer örnek dosya paylaşırsanız farklı çözümler bulunabilir.
Hangi sonucu vereceğini peki nasıl belirtmem lazım?
 
istediğim işlemi kısmi olarak aşağıdaki kod yardımıyla yapabiliyorum ama bunu bir fonksiyon gibi bütün hücrelere nasıl yapabileceğimi bulamadım açıkçası. Yapmaya çalıştığım şeyin mantığını anladığınızı varsayaraktan o kodu da buraya yazıyorum.

Sub if1()
Dim adet As Integer
Set s1 = Sheets("Üretim Takip")
Set s2 = Sheets("Stok Takip")

If s1.Range("H3") = "HAZIR" And s1.Range("D3") = "HCU-250" Then
s2.Range("A3") = s1.Range("G3")
s2.Range("D7") = s1.Range("G3")
End If
If s1.Range("H3") = "HAZIR" And s1.Range("D3") = "HCU-250E-500" Then
s2.Range("B3") = s1.Range("G3")
s2.Range("F7") = s1.Range("G3")
End If
If s1.Range("H3") = "HAZIR" And s1.Range("D3") = "HCU-250E-750" Then
s2.Range("C3") = s1.Range("G3")
s2.Range("F7") = s1.Range("G3")
End If
If s1.Range("H3") = "HAZIR" And s1.Range("D3") = "HCU-250WH" Then
s2.Range("D3") = s1.Range("G3")
s2.Range("D7") = s1.Range("G3")
End If
If s1.Range("H3") = "HAZIR" And s1.Range("D3") = "HCU-400" Then
s2.Range("E3") = s1.Range("G3")
s2.Range("E7") = s1.Range("G3")
End If
If s1.Range("H3") = "HAZIR" And s1.Range("D3") = "HCU-400E-1000" Then
s2.Range("F3") = s1.Range("G3")
s2.Range("G7") = s1.Range("G3")
End If
If s1.Range("H3") = "HAZIR" And s1.Range("D3") = "HCU-400E-1250" Then
s2.Range("G3") = s1.Range("G3")
s2.Range("G7") = s1.Range("G3")
End If
If s1.Range("H3") = "HAZIR" And s1.Range("D3") = "HCU-400WH" Then
s2.Range("H3") = s1.Range("G3")
s2.Range("E7") = s1.Range("G3")
End If
End Sub
 
Örnek dosya paylaşmanızı tavsiye ederim.
 
Şimdi önceki yazdıklarınızı unutun ve bu dosyada ne yapmak istediğinizi açıklayın. KTF falan karıştırmayın. "Şu sayfanın şu hücresinde şu şartlarda şöyle olsun" şeklinde açıklayın lütfen.
 
yusuf bey ilk olarak şunu belirtmem lazım, ilginiz ve desteğiniz için çok teşekkür ederim.

ben şunu yapmaya çalışıyorum, Üretim takibe yeni bir proje girildiğinde, H sütununa bir model giriyoruz, G sütununa adet ve H sütununa da Hazır veya Stoktan düşüldü giriyoruz. H sütununa HAZIR yazıldığı zaman, D sütununda bulunan HCU Model kısmına yazdığım spesifik HCU modelinin, Stok Takip sayfasında ilgili makro butonunun altına Adet miktarını yazmasını istiyorum. Kısacası model ve adet girildiğinde, ve H sütunundaki onay kısmına "hazır" yazdığım zaman adet miktarını butonun altına atması. Butona bastığımda ise adet miktarını stoktan malzeme düşüyor. Yani ben butona 5 defa basmak yerine. butonun altında eğer 5 yazıyorsa, ürün için gerekli malzemelerin stoğundan x5 adet düşecek. Bunu normal bir EĞER fonksiyonu ile yazmaya çalıştığımda başaramadım o yüzden kendi fonksiyonumu yapayım dedim.
 

Model

Adet

Stok Onay

HCU-250

11

Hazır
yukarıda gördüğünüz şekilde olursa eğer, stok takip sayfasında HCU-250 stoktan düşme butonunun altındaki hücreye adeti basacak istediğim program
 
Doğru anladıysam aşağıdaki makroyu dener misiniz?

PHP:
Sub uretstok()
Set s1 = Sheets("Üretim Takip")
Set s2 = Sheets("Stok Takip")
son = WorksheetFunction.Max(3, s1.Cells(Rows.Count, "D").End(3).Row)
For i = 3 To son
    If s1.Cells(i, "H") = "HAZIR" Then
        Select Case s1.Cells(i, "D")
            Case Is = "HCU-250"
                s2.[A3] = s2.[A3] + s1.Cells(i, "G")
            Case Is = "HCU-250E-500"
                s2.[B3] = s2.[B3] + s1.Cells(i, "G")
            Case Is = "HCU-250E-500"
                s2.[B3] = s2.[B3] + s1.Cells(i, "G")
            Case Is = "HCU-250E-750"
                s2.[C3] = s2.[C3] + s1.Cells(i, "G")
            Case Is = "HCU-250WH"
                s2.[D3] = s2.[D3] + s1.Cells(i, "G")
            Case Is = "HCU-400"
                s2.[E3] = s2.[E3] + s1.Cells(i, "G")
            Case Is = "HCU-400E-1000"
                s2.[F3] = s2.[F3] + s1.Cells(i, "G")
            Case Is = "HCU-400E-1250"
                s2.[G3] = s2.[G3] + s1.Cells(i, "G")
            Case Is = "HCU-400WH"
                s2.[H3] = s2.[H3] + s1.Cells(i, "G")
        End Select
    End If
Next
End Sub
 
Yusuf bey program işe yaradı. Bunun devamlı çalışması için ne yapmam lazım acaba?
 
Devamlı derken ne kastettiğinizi anlamadım maalesef.
 
kod excel dosyası açık olduğu sürece açık olması, anladığım kadarıyla VBA sayfasında çalıştır tuşuna basınca sadece çalışıyor. Ben bu kodun hep çalışır olmasını istiyorum çünkü bu excel i kullanacak insanlar kodlama vs bilmediğinden zorluk yaşayabilirler
 
"Hep çalışır olması" derken sürekli olarak aktarım yapmasını istiyorsunuz anladığım kadarıyla. Peki bu işlem ne zaman yapılacak? Yani süre aralığıyla mı? Yoksa belirli bir hücrede belirli bir işlem yapıldığında mı?

Bu arada verdiğim kodu çalıştırmak için dosyanıza bir resim/nesne/düğme ekleyip makro atayabilirsiniz.
 
Hücreye HAZIR yazıldığında kod çalışabilir, çünkü ASIL checklediği şey HAZIR yazıp yazmaması. Makro düğmesi ekleyerek yaptım, size ne kadar teşekkür etsem azdır. 2 haftadır bununla uğraşıyordum.
 
Private Sub Worksheet_Activate()
kullanarak sanırsam ama onu nasıl kullanacağımı bilemedim açıkçası
 
Aşağıdaki kodları Üretim Takip sayfasının kod bölümüne (sayfa adına sağ tıklayıp kod görüntüle deyince açılan sayfaya) yapıştırın. H3:H200 aralığına HAZIR yazıldığında kodlar çalışır ve o satırdaki veriye göre aktarım yapar:

PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
Set s1 = Sheets("Üretim Takip")
Set s2 = Sheets("Stok Takip")
If Intersect(Target, [H3:H200]) Is Nothing Then Exit Sub
If Target = "HAZIR" Then
    Select Case Target.Offset(0, -4)
        Case Is = "HCU-250"
            s2.[A3] = s2.[A3] + Target.Offset(0, -1)
        Case Is = "HCU-250E-500"
            s2.[B3] = s2.[B3] + Target.Offset(0, -1)
        Case Is = "HCU-250E-500"
            s2.[B3] = s2.[B3] + Target.Offset(0, -1)
        Case Is = "HCU-250E-750"
            s2.[C3] = s2.[C3] + Target.Offset(0, -1)
        Case Is = "HCU-250WH"
            s2.[D3] = s2.[D3] + Target.Offset(0, -1)
        Case Is = "HCU-400"
            s2.[E3] = s2.[E3] + Target.Offset(0, -1)
        Case Is = "HCU-400E-1000"
            s2.[F3] = s2.[F3] + Target.Offset(0, -1)
        Case Is = "HCU-400E-1250"
            s2.[G3] = s2.[G3] + Target.Offset(0, -1)
        Case Is = "HCU-400WH"
            s2.[H3] = s2.[H3] + Target.Offset(0, -1)
    End Select
End If
End Sub
 
Nasıl yapıldığını anladım Yusuf bey, gerçekten söylüyorum kodun nasıl çalıştığını anladım ve işe yaradı. Size çok minnettarım, çok teşekkür ederim
 
Geri
Üst