[Yardım]  CommandButton ile Worksheet_Change Event Çalıştırma

Class Module İşlemleri

CommandButton ile Worksheet_Change Event Çalıştırma

İleti#1)  vapeolog » 09 Arl 2015 02:45

Arkadaşlar merhaba,
Aranızda yeniyim..Şimdiden yardımlarınız için teşekkür ederim.
Problemimin kaynağı; worksheet_change olayını sayfanın kodlarına yazdığımda çalıştırabiliyorum fakat bunu bir koşula bağlı olarak commandbutton çalıştırmam gerektiği için modül kullanmam gerekiyor.Modül içerisinde de worksheet_change çalışmadığı/çalıştıramadığım için classmodule kullanmak zorunda kaldım.Fakat bu konuda çok zayıfım.
Butona her tıkladığımda modülü çalıştırmasını istiyorum.Bunu activex denetimi üzerinden yapmaya çalıştım fakat içinden çıkamadım.
Şöyle bir problemim var;

bir commandbutton(userform üzerinde), bir module ve bir de class module ile worksheet_selectionchange olayı çalıştırmak istiyorum.
Ama classmodul ü application olarak set ettiğim için buton tıkladığım zaman istediğim fonksiyonu çalıştırmıyor onun yerine sürekli aktif halde bekleyen bir application çalıştırıyor.
Yazdığım kodlar şu şekilde;
1-) userform üzerindeki commandbutton_click ile kaydetme olayı
Kod: Tümünü seç
Private Sub CommandButton1_Click()
    Call comment_ekle.ekle
End Sub


2-)çağrılan modül (comment_ekle.ekle)
Kod: Tümünü seç
Dim sh As New Class1
Sub ekle()
Set sh.app = Application
End Sub


3-)modülün başvurduğu classmodül (app)
Kod: Tümünü seç
Public WithEvents app As Excel.Application

Private Sub app_SheetSelectionChange(ByVal sh As Object, ByVal Target As Range)
If ComboBox1.Text <> "" And ComboBox2.Text <> "" Then
            If Cells(12, Target.Column).Comment Is Nothing Then
            Cells(12, Target.Column).ClearComments
            Cells(12, Target.Column).AddComment
            Cells(12, Target.Column).Comment.Visible = False
            Cells(12, Target.Column).Comment.Text Text:=ComboBox1.Text & Chr(10) & ComboBox2.Text & Chr(10) & Replace(Now, ":", ":")
           
            Else
            MsgBox " daha önce açıklama girilmiş"
            Unload UserForm2
           
            End If
    Else
        MsgBox "Eksik giriş yaptınız!", vbInformation
    End If
End Sub


Umarım tam olarak açıklayabilmişimdir.. :?
Kullanıcı avatarı
vapeolog
Yeni Başlamış
 
Kayıt: 09 Arl 2015 01:30
Meslek: öğrenci
Yaş: 32
İleti: 14
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: izmir/bornova

Cevap: command button ile worksheet_change event çalıştırma

İleti#2)  Ali ÖZ » 09 Arl 2015 11:13

Merhaba,
Öncelikle hoş geldiniz.
Neden bu şekilde bir işlem yapmak istiyorsunuz ? Dilerseniz örnek dosyanızı ve yapmak istediğiniz işlemi paylaşın belki farklı çözümler üretilebilir.
Allah bize yeter, O ne güzel vekildir.
حَسْبُنَا اللهُ وَنِعْمَ الْوَكِيلُ
Kullanıcı avatarı
Ali ÖZ
Forum Moderatörü
 
Adı Soyadı:Ali ÖZ
Kayıt: 17 Oca 2013 12:16
Konum: SAKARYA
Meslek: Yazılım
Yaş: 37
İleti: 9527
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: Adapazarı/SAKARYA

Cevap: CommandButton ile Worksheet_Change Event Çalıştırma

İleti#3)  vapeolog » 11 Arl 2015 18:56

Teşekkür ederim.
Classmodul kullanmadan alternatif bir çözüm buldum.

Proje dosyası karmaşık olduğundan paylaşamadım. iç içe geçmiş çok fazla modül vardı.
Yine de teşekkür ederim.
Kullanıcı avatarı
vapeolog
Yeni Başlamış
 
Kayıt: 09 Arl 2015 01:30
Meslek: öğrenci
Yaş: 32
İleti: 14
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: izmir/bornova

Cevap: CommandButton ile Worksheet_Change Event Çalıştırma

İleti#4)  Tarkan VURAL » 12 Arl 2015 01:35

Class ihtiyacınız yok. Bir butona yazacağınız hücre seçimi ile zaten WorkSheetSelection_Change kendiliğinden tetiklenip çalışacaktır.

Örnek:
Kod: Tümünü seç
Private Sub Worksheetselection_change(byval target as range)
if target.column=1 then
msgbox "Çalış..."
end if
end sub

Private sub commandbutton1_click()
cells(activecell.row,1).select
End sub


Tuşa bastığınızda aktif satırın A sütunu seçilecek. Seçim sonrası da yazdığım mantığa göre mesaj vermesi lazım.
Resim
www.tarkanvural.com.tr

İnnâ lillâhi ve innâ ileyhi raciûn
Şüphesiz ki; biz Allah’a âidiz ve vakti geldiğinde O’na döndürüleceğiz.

HasbunAllâhu ve nimel vekîl
Bize Allah yeter. O ne güzel vekildir.


ExcelVBA.NET' e katkıda bulunmak ister misiniz ? O halde BAĞIŞ butonunu tıklayın...
Kullanıcı avatarı
Tarkan VURAL
Yönetim Kurulu
 
Adı Soyadı:Tarkan VURAL
Kayıt: 14 Haz 2008 20:27
Konum: tarkan@excelvba.net
Meslek: LUU, Yazılım Geliştirme Müdürü
Yaş: 45
İleti: 26822
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: İstanbul - Beylikdüzü

REKLAM
Excel Logo XML Oluşturucu
Logo Object Designer ile Uyarlama

Cevap: CommandButton ile Worksheet_Change Event Çalıştırma

İleti#5)  vapeolog » 12 Arl 2015 05:19

Tarkan Bey,
Teşekkür ederim.Biraz uzun olacak ama yine de mümkün olduğunca kısaltarak yazmaya çalışayım;

Söylediğiniz selection_change event ını denemiştim.Fakat yapı biraz karmaşık olduğu için active.cell seçilemiyordu.Dolayısıyla active.cell referans alınarak worksheet_change olayını çalıştıramıyordum.Bu yüzden class_module kullanma ihtiyacı doğdu.

Şöyleki sayfa1 deki buton userform1 ve sayfa2 yi açıyor.Burada userform1 üzerindeki boxlara girilen değerleri c57:ag61 arası hücrelere sırayla yazdırıyorum.İçiçe for next kullanarak(1.sinde sutun sayarak,2.sinde satır sayarak) ,c57 doluysa c58'e olacak şekilde.c61 dolduğunda d57'ye geçiyor ve devam ediyor.

Tabii bu döngü, değer gireceği hücreyi seçmeye ihtiyaç duymadığı için target.column a da ulaşılamıyordu.

Burada problem oluşturan kısım şu oldu;

örneğin döngü c59'un boş olduğunu yakaladı ve değeri buraya girdi.Her sütunun 63.satırı girilen 5 değerin (c57,c58,c59,c60,c61) ortalamasını alıyor.Ve bu değer belli bir aralığın dışına çıkarsa userform2 çalışarak kullanıcıyı hata açıklaması girmeye zorluyor ve kaydet butonuna basıldığında bu açıklamayı da ilgili sütunun 12.satırına comment olarak ekliyor.

İşte bu nokta da userform2'nin açıklamayı girebilmesi için userform1'deki döngüde o an hangi hücreye veri girişi yapılmışsa onu yakalayıp o hücrenin bulunduğu sütunun 12.satırına açıklamayı girmesi gerekiyor.

userform1'deki döngüde sırası gelen hücreyi userform2 de adres gösteremediğim için sıkışıp kaldım ve çareyi classmodule kullanarak c57:c61 arasında en son nereye değer girildiyse o hücreyi bulup ve o hücrenin olduğu sütunun 12.satırına açıklamayı eklemeye çalıştım fakat başarılı olamadım.

Sonuç olarak ben de userform2'yi iptal ettim.userform2 deki nesneleri userform1 i genişletip yanına ekledim ve hide yaptım.Yukarıdaki ort değer koşulu oluştuğunda bu nesneleri aktif hale getirerek işlemi yapmayı başardım.
Çünkü userform2 de yazdığım kodları userform1 deki döngü içine yazınca otomatik olarak hedef sütuna ulaşmış oldum.

Aşağı kodlarda önüne 12345 yazdığım if bölümü aslında userform2 de yapmak istediğim işlemdi.Burada geçen command button27 de userform2de kullanmak istediğim kaydet butonu idi.
Kod: Tümünü seç
Private Sub CommandButton1_Click() 'ölçü girişi
If TextBox1.Value <> "" And ComboBox1.Text <> "" Then
'c57-ag61 arasına sırayla veri girişi
  For sutun = 3 To 33
    For satir = 57 To 61
    If Not Cells(satir, sutun) <> "" Then
    Cells(satir, sutun).Select
    ActiveSheet.Range("c218") = Format(Now, "dd/mm/yyyy")
    ActiveSheet.Range("c216") = Format(Now, "hh:mm")
    Cells(satir, sutun) = TextBox1.Value
    Cells(satir, sutun).ClearComments
    Cells(satir, sutun).AddComment   
    Cells(satir, sutun).Comment.Visible = False
    Cells(satir, sutun).Comment.Text Text:=ComboBox1.Text & Chr(10) & Replace(Now, ":", ":")
    iResult = MsgBox(("Girilen ölçü - " & TextBox1.Text & Chr(10) & "Girdiğiniz değeri kontrol edin!" & Chr(10) & "Devam etmek istiyor musunuz?"), vbYesNo + vbExclamation, "Uyarı") 'kontrol mesajı göster
    If iResult = vbYes Then
           
12345       If Cells(12, sutun).Value <= Range("a26").Value Or Cells(12, sutun).Value >= Range("a21").Value Then
            UserForm1.Width = 590
            Cells(12, sutun).Select
            UserForm1.ComboBox3.Visible = True
            UserForm1.Label4.Visible = True
            UserForm1.Label5.Visible = True
            UserForm1.CommandButton27.Visible = True
            UserForm1.CommandButton1.Enabled = False
            UserForm1.CommandButton4.Enabled = False
            UserForm1.TextBox1.Enabled = False
            UserForm1.ComboBox1.Enabled = False
            Dim i, x As Long
            For i = 1 To 1000
            DoEvents
            Label5.ForeColor = vbRed
            Cells(12, sutun).Interior.Color = vbYellow
            For x = 0 To 20000: DoEvents: Next x
            Label5.ForeColor = vbBlue
            Cells(12, sutun).Interior.Color = RGB(236, 227, 193)
            For x = 0 To 20000: DoEvents: Next x
            Next i
           
        Else
        Unload UserForm1
        ActiveSheet.Visible = xlSheetHidden
        Sheets("ana sayfa").Select
12345       End If
       
       
        Else
        TextBox1.Value = ""
        ComboBox1.Value = ""
        Cells(satir, sutun).Value = ""
        Cells(satir, sutun).ClearComments
        UserForm1.CommandButton4.Enabled = False
       
    End If
    Exit Sub
    End If
    Next satir
   Next sutun

Else
    MsgBox "Değer Girilmedi!", vbInformation + vbCritical, "Uyarı"
End If
End Sub


commandbutton27 kodları (Kaydet butonu)

Kod: Tümünü seç
Private Sub CommandButton27_Click()'açıklama kaydı girişi
If ComboBox1.Text <> "" And ComboBox3.Text <> "" Then
               
                If ActiveCell.Comment Is Nothing Then
                ActiveCell.ClearComments
                ActiveCell.AddComment
                ActiveCell.Comment.Visible = False
                ActiveCell.Comment.Text Text:=ComboBox1.Text & Chr(10) & ComboBox3.Text & Chr(10) & Replace(Now, ":", ":")
                MsgBox "Hata açıklaması girildi.", vbInformation + vbMsgBoxRight, "Durum"
                Else
                MsgBox " Daha Önce Açıklama Girilmiş!", vbInformation + vbExclamation, "Uyarı"
                End If
               
                If ActiveSheet.Range("g10") < 1.33 And ActiveSheet.Range("g10") > 0 Then
                Call TEMP_HATA_KAYIT.TEMP_HATA_KAYIT 'Xort kontrol limitleri dışına çıkarsa,maile eklemek için hata kaydı al.
                Call HATA_KAYIT.HATA_KAYIT 'Xort kontrol limitleri dışına çıkarsa,saklamak için hata kaydı al.
                Call HATA_KAYIT_GONDER.HATA_KAYIT_GONDER 'Xort kontrol limitleri dışına çıkarsa yapılan hata kaydını mail olarak gönder.
                End If
        ActiveCell.Interior.Color =RGB(236, 227, 193)
        Unload UserForm1
        ActiveSheet.Visible = xlSheetHidden
        Sheets("ana sayfa").Select
Else
  MsgBox "Eksik Giriş Yapıldı.Lütfen Bilgileri Eksiksiz Giriniz!", vbInformation + vbCritical, "Uyarı"
 
End If

End Sub


Ne kadar uğraşsam da yine de uzun bir yazı oldu.Şimdiden okuduğunuz için teşekkür ederim.:)
Kullanıcı avatarı
vapeolog
Yeni Başlamış
 
Kayıt: 09 Arl 2015 01:30
Meslek: öğrenci
Yaş: 32
İleti: 14
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: izmir/bornova


Forum Class Module

Online Kullanıcılar

Bu forumu görüntüleyenler: Kayıtlı kullanıcı yok ve 1 misafir

cron
Bumerang - Yazarkafe