Userform içinde çalışan kodun fonksiyon çağrılınca çalışmaması

Katılım
8 Aralık 2013
Mesajlar
5
Excel Vers. ve Dili
2016 Türkçe
Userform içinde textboxları otomatik temizleyen bir döngü kurdum, sorunsuz çalışıyor. Ancak bunu temizle() fonksiyonu içine alıp çağırdığımda fuction not defined hatası alıyorum. 1 saattir uğraşıyorum hatamı bulamadım. Yardımcı olabilen var mı?
Kod:
Option Explicit

Private Sub btKaydet_Click()
Dim i As Integer


Sheets("Sayfa3").Select
Rows("2:2").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    
For i = 1 To 4          ' BOXLARDAN SIRAYLA VERİ ÇEKME
Sheets("Sayfa3").Cells(2, i).Value = Controls("box" & i)
Next i

'Temizle (4)

For k = 1 To 4          ' BOXLARIN İÇİNİ TEMİZLEME USERFORM İÇİNDE ÇALIŞIYOR
Controls("box" & k) = ""
Next k

Bu da çalışmayan modül içindeki kod:

End Sub
Kod:
Option Explicit

Function Temizle(box_sayisi As Integer)
Dim k As Integer

For k = 1 To box_sayisi
Controls("box" & k).Value = ""

Next k

End Function
 

Haluk

𐱅𐰇𐰼𐰚
Katılım
7 Temmuz 2004
Mesajlar
12,306
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Sanki UserForm1.Controls("box" & k) ......... falan gibi birşey işe yarar gibi geldi bana.

.
 
Katılım
8 Aralık 2013
Mesajlar
5
Excel Vers. ve Dili
2016 Türkçe
Teşekkür ederim işe yaradı ancak; bu fonksiyonun bütün userformlarda çalışmasını istersem başına ne yazmam gerekir? Yani Userform1 yerine içinde bulunduğun userform diye birşey yazamam mı?
 

Haluk

𐱅𐰇𐰼𐰚
Katılım
7 Temmuz 2004
Mesajlar
12,306
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Ekte örnek bir dosya hazırladım, incelersiniz....

.
 
Katılım
8 Aralık 2013
Mesajlar
5
Excel Vers. ve Dili
2016 Türkçe
Çok daha kolay bir şekilde Me.Controls("box" & k) gibi bir şeyle hallolur sanmıştım. Sebebini anlamadığım bir şekilde invalid use of me hatası veriyor.
 

Haluk

𐱅𐰇𐰼𐰚
Katılım
7 Temmuz 2004
Mesajlar
12,306
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
"Me" sadece UserForm modülünde kullanılabilir, standart veya class modüllerinde kullanılamaz...

.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
41,519
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Benzer bir alternatif..

Boş bir modüle;

C++:
Option Explicit

Sub Clear_Controls(Current_Form As Object)
    Dim My_Ctrl As Control
    
    For Each My_Ctrl In Current_Form.Controls
        If TypeName(My_Ctrl) = "TextBox" Then
            My_Ctrl.Value = ""
        ElseIf TypeName(My_Ctrl) = "ComboBox" Then
            My_Ctrl.Value = ""
        ElseIf TypeName(My_Ctrl) = "CheckBox" Then
            My_Ctrl.Value = False
        ElseIf TypeName(My_Ctrl) = "OptionButton" Then
            My_Ctrl.Value = False
        ElseIf TypeName(My_Ctrl) = "ListBox" Then
            My_Ctrl.Clear
        End If
    Next
End Sub
Aşağıdaki kodu formlarınızdaki temizleme butonuna ekleyiniz.

C++:
Private Sub CommandButton1_Click()
    Clear_Controls Me
End Sub
 

Haluk

𐱅𐰇𐰼𐰚
Katılım
7 Temmuz 2004
Mesajlar
12,306
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Alternatif olarak, 4 No'lu mesajdaki kodların yerine aşağıdakiler de kullanılabilir;

UserForm modülü:

C#:
Private Sub CommandButton1_Click()
    Call myProc(4, Me)
End Sub



Module1 içindeki kodlar:

C#:
Sub myProc(iCount As Integer, Form As UserForm)
    Dim i As Integer
 
    For i = 1 To iCount
        Form.Controls("TextBox" & i) = ""
    Next
End Sub

.
 
Katılım
1 Haziran 2016
Mesajlar
50
Excel Vers. ve Dili
Office 2013-Türkçe 64 Bit
Benzer bir alternatif..

Boş bir modüle;

C++:
Option Explicit

Sub Clear_Controls(Current_Form As Object)
    Dim My_Ctrl As Control
   
    For Each My_Ctrl In Current_Form.Controls
        If TypeName(My_Ctrl) = "TextBox" Then
            My_Ctrl.Value = ""
        ElseIf TypeName(My_Ctrl) = "ComboBox" Then
            My_Ctrl.Value = ""
        ElseIf TypeName(My_Ctrl) = "CheckBox" Then
            My_Ctrl.Value = False
        ElseIf TypeName(My_Ctrl) = "OptionButton" Then
            My_Ctrl.Value = False
        ElseIf TypeName(My_Ctrl) = "ListBox" Then
            My_Ctrl.Clear
        End If
    Next
End Sub
Aşağıdaki kodu formlarınızdaki temizleme butonuna ekleyiniz.

C++:
Private Sub CommandButton1_Click()
    Clear_Controls Me
End Sub
Merhaba,
CommandButton'a yazılacak komutu KTF da olduğu gibi parametreli yazıp istediğimiz öğenin temizlenmesini sağlayabilir miyiz?
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
41,519
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Verdiğimiz önerilerin neresi sizi tatmin etmedi..

Kafanızdan geçen kurguyu paylaşırsanız belki alternatif çözümler gelebilir..
 
Katılım
1 Haziran 2016
Mesajlar
50
Excel Vers. ve Dili
Office 2013-Türkçe 64 Bit
Sayın @Korhan Ayhan,
Galiba yanlış anlaşıldım. Verdiğiniz kodlar son derece tatmin edici. Benzer kodları buradan öğrenmiştim ama farklı tiplerdeki nesneleri(TextBox, ListBox ...) temizlerken ayrı prosedürler yazıyordum. Sizin kodların hepsini birden temizlediğini görünce aklıma şöyle bir fikir geldi.
Kod:
Private Sub CommandButton1_Click()
    Clear_Controls Me
End Sub
kodunda nasıl bir değişiklik yapmalıyım ki, Sub Clear_Controls(Current_Form As Object) prosedürü benim istediğim nesneyi temizlesin. (Sadece TextBox, sadece ListBox gibi) Birkaç deneme yaptım ama olmadı.
Saygılar.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
41,519
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Sadece TextBox için;

C++:
Option Explicit

Sub Clear_Controls(Current_Form As Object)
    Dim My_Ctrl As Control
    
    For Each My_Ctrl In Current_Form.Controls
        If TypeName(My_Ctrl) = "TextBox" Then My_Ctrl.Value = ""
    Next
End Sub
 
Katılım
2 Temmuz 2014
Mesajlar
74
Excel Vers. ve Dili
2021 Türkçe, 64bit
@Korhan Ayhan hocamın kodunu aşağıdaki gibi düzenleyip dener misiniz?
Kod:
Sub Clear_Controls(Current_Form As Object, Optional ByVal xTur As String)
Dim My_Ctrl As Control, xTurT As String
        For Each My_Ctrl In Current_Form.Controls
        If xTur = "" Then xTurT = TypeName(My_Ctrl) Else xTurT = xTur
            If TypeName(My_Ctrl) = "TextBox" And xTurT = "TextBox" Then
                My_Ctrl.Value = ""
            ElseIf TypeName(My_Ctrl) = "ComboBox" And xTurT = "ComboBox" Then
                My_Ctrl.Value = ""
            ElseIf TypeName(My_Ctrl) = "CheckBox" And xTurT = "CheckBox" Then
                My_Ctrl.Value = False
            ElseIf TypeName(My_Ctrl) = "OptionButton" And xTurT = "OptionButton" Then
                My_Ctrl.Value = False
            ElseIf TypeName(My_Ctrl) = "ListBox" And xTurT = "ListBox" Then
                My_Ctrl.Clear
            End If
        Next

End Sub
tümünü temizlemek isterseniz Clear_Controls Me
belli bir türü temizlemek isterseni me den sonra virgül ekleyip tür adını girebilirsiniz
mesela OptionButton düğmelerini silmek için Me, "OptionButton"
Kod:
Clear_Controls Me, "OptionButton"
mesela ListBox düğmelerini silmek için Me, "ListBox " gibi
Kod:
Clear_Controls Me, "ListBox"
 
Katılım
2 Temmuz 2014
Mesajlar
74
Excel Vers. ve Dili
2021 Türkçe, 64bit
aklıma gelmişken sorayım; listbox ile comboboxın temizlenmesinden kastınız tam olarak nedir?
değer seçilmiş ise seçimin devre dışı bırakılması mı yoksa liste içeriklerinin tamamen boşaltılması mı?
 
Katılım
1 Haziran 2016
Mesajlar
50
Excel Vers. ve Dili
Office 2013-Türkçe 64 Bit
Sayın @haliliyas,
Yanıt için teşekkürler.
Sayın @Korhan Ayhan 'ın #7 numaralı mesajını görünce aklıma Kullanıcı Tanımlı Fonksiyon(KTF) gibi bir uygulama yapılabilir mi? sorusu geldi. Amacım öğrenmekti. Biraz uğraştım ama yapamadım. Sizin koddaki " ... Optional ByVal ... ) " ifadesini yazmayı beceremedim. Şimdi olayı anladım. Bir kez daha teşekkür ederim.
Bu arada, ListBox'u temizlemek için kullanılan My_Ctrl.Clear ifadesi ListBox1.RowSource = "Sayfa1!A1:A12" şeklinde doldurulan ListBox'ta hata veriyor. (AddItem yöntemini denemedim) Bunun yerine My_Ctrl.RowSource = "" ifadesini kullanarak sorunu çözdüm.
 
Katılım
2 Temmuz 2014
Mesajlar
74
Excel Vers. ve Dili
2021 Türkçe, 64bit
rica ederim
iyi çalışmalar
 
Üst