Kendi fonksiyonumdaki hata nedir?

Katılım
23 Ağustos 2022
Mesajlar
40
Excel Vers. ve Dili
Excel 360 TR
Altın Üyelik Bitiş Tarihi
26-08-2023
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
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
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.
 
Katılım
23 Ağustos 2022
Mesajlar
40
Excel Vers. ve Dili
Excel 360 TR
Altın Üyelik Bitiş Tarihi
26-08-2023
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
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Altın üyelik için kullanılan sistem siteden faklı, orda ayrı kullanıcı oluşturmanız gerekiyor galiba.
 
Katılım
23 Ağustos 2022
Mesajlar
40
Excel Vers. ve Dili
Excel 360 TR
Altın Üyelik Bitiş Tarihi
26-08-2023
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?
 
Katılım
23 Ağustos 2022
Mesajlar
40
Excel Vers. ve Dili
Excel 360 TR
Altın Üyelik Bitiş Tarihi
26-08-2023
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
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Örnek dosya paylaşmanızı tavsiye ederim.
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Ş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.
 
Katılım
23 Ağustos 2022
Mesajlar
40
Excel Vers. ve Dili
Excel 360 TR
Altın Üyelik Bitiş Tarihi
26-08-2023
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.
 
Katılım
23 Ağustos 2022
Mesajlar
40
Excel Vers. ve Dili
Excel 360 TR
Altın Üyelik Bitiş Tarihi
26-08-2023

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
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
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
 
Katılım
23 Ağustos 2022
Mesajlar
40
Excel Vers. ve Dili
Excel 360 TR
Altın Üyelik Bitiş Tarihi
26-08-2023
Yusuf bey program işe yaradı. Bunun devamlı çalışması için ne yapmam lazım acaba?
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Devamlı derken ne kastettiğinizi anlamadım maalesef.
 
Katılım
23 Ağustos 2022
Mesajlar
40
Excel Vers. ve Dili
Excel 360 TR
Altın Üyelik Bitiş Tarihi
26-08-2023
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
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
"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.
 
Katılım
23 Ağustos 2022
Mesajlar
40
Excel Vers. ve Dili
Excel 360 TR
Altın Üyelik Bitiş Tarihi
26-08-2023
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.
 
Katılım
23 Ağustos 2022
Mesajlar
40
Excel Vers. ve Dili
Excel 360 TR
Altın Üyelik Bitiş Tarihi
26-08-2023
Private Sub Worksheet_Activate()
kullanarak sanırsam ama onu nasıl kullanacağımı bilemedim açıkçası
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
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
 
Katılım
23 Ağustos 2022
Mesajlar
40
Excel Vers. ve Dili
Excel 360 TR
Altın Üyelik Bitiş Tarihi
26-08-2023
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
 
Üst