userformda command button hareketi

Katılım
9 Ocak 2008
Mesajlar
133
Excel Vers. ve Dili
office xp
userform üzerindeki command butona basınca buton userformun ortasına gelecek şifredeki diğer rakamlarıda bastıkça ortasına gelecek şifreyi onaylayıp tamam düğmesine basınca butonlar tekrar eski haline gelip sayfa açılacak olabilirmi örnek dosyada şifreli bir örnek mevcut ama butonlar hareketsiz şifre 0000 dür
 

Ekli dosyalar

Katılım
22 Nisan 2005
Mesajlar
486
Excel Vers. ve Dili
tarkan@tarkanvural.com.tr
Fantaziye kaçarsak daha neler olur olmasına da ....

Kod sayfasının en üstüne
Private ex as variant yazarak aşağıdaki kodlar işinizi görür.

Kod:
Private Sub c0_Click()
On Error Resume Next
TextBox1 = TextBox1 & 0
ex = Val(ex + 20)
c0.Move Me.Left / 2 + ex, Me.Top / 2
End Sub

Private Sub c1_Click()
On Error Resume Next
TextBox1 = TextBox1 & 1
ex = Val(ex + 20)
c1.Move Me.Left / 2 + ex, Me.Top / 2
End Sub

Private Sub c2_Click()
On Error Resume Next
TextBox1 = TextBox1 & 2
ex = Val(ex + 20)
c2.Move Me.Left / 2 + ex, Me.Top / 2
End Sub
' diğerleri için siz devam edin.
Ama merak ettiğim şey ortaya gelmiş bir 5 butonu olsun. Şifrede ikinci kes rakamı varsa kullanıcı ne yapacak, ortaya hangi tuş gelecek hehe, sanırım bu biraz daha karıştıracak ortalığı.

Excel' i ve VBA ' yı olduğu gibi kullanmak daha mantıklı. ;9
 
Katılım
9 Ocak 2008
Mesajlar
133
Excel Vers. ve Dili
office xp
teşekkürler

tarkan vural teşekkürler güzel olmuş tamam tuşuna basınca şifre doğruysa sayfaya girsin şifre yanlışsa tuşlar geri gelsin biraz daha geliştirebilirmiyiz
 
Katılım
22 Nisan 2005
Mesajlar
486
Excel Vers. ve Dili
tarkan@tarkanvural.com.tr
Üzerinde biraz çalışın dilerseniz, çözeceğinize eminim ;)
Arada , balık tutmayı da öğrenin , hazır pişmiş balık yemekten daha zevklidir, inanın....

İyi çalışmalar.
 
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
Kodu daha verimli ve hızlı bir hale getirmek için aşağıdaki yapı oluşturuldu.

1. Projeye bir adet Class module (Class1) ilave edilerek, textbox'a şifre giren button kodları kısaltıldı. Class1 için aşağıdaki kodlar kullanıldı.

Kod:
Option Explicit
Public WithEvents cmB As MSForms.CommandButton
Private Sub cmB_Click()
    With sifre
        With .TextBox1
            If Len(.Text) = 0 Then
                .Text = Right(cmB.Caption, 1)
            Else
                .Text = .Text & Right(cmB.Caption, 1)
            End If
            sSifre = sSifre & Right(cmB.Caption, 1)
        End With
    End With
    
    With cmB
        .Left = (sifre.Width / 2) - (.Width / 2)
        .Top = (sifre.Height / 2) - (.Height / 2)
    End With
    
End Sub
2. Module11'e sSifre adında bir bellek değişkeni tanımlandı. Bu değişken girilen sayıların tutmaktadır.

Kod:
Public sSifre As String
3. "sifre" adlı Userform'da Class ve Collection'lar vasıtasıyla düzenlemeler yapıldı. Eklenen kodlar şunlardır.

Initilaize olayı için: (Bu kodlar, class nesnelere olayları atamakta, aynı zamanda, sayı butonlarının ilk konumlarını collection nesnesine atmaktadır)

Kod:
Private Sub UserForm_Initialize()
    
    Dim cmbDug As Control
    Dim i As Integer
        
    Set col = New Collection
    
    For Each cmbDug In sifre.Controls
        
        If TypeOf cmbDug Is MSForms.CommandButton Then
            
                If IsNumeric(cmbDug.Caption) Then
                    
                    i = i + 1
                    ReDim Preserve cmBler(1 To i)
                    Set cmBler(i).cmB = cmbDug
                    
                    col.Add cmbDug.Left, cmbDug.Name
                    
               
                End If
            
        End If
    
    Next
    TextBox1.PasswordChar = "*"
End Sub
cc_Click olayı'nda herşey geriye alınmaktadır. cgeri_Click olayında, en son işlem geri alınmaktadır. CommandButton1_Click olayında; şifre hatalı ise ilk pozisyona geri dönülmektedir. Kodları da şu şekildedir.

Kod:
Private Sub cc_Click()
    Dim cmbDug As CommandButton
    
    TextBox1 = ""
    islem = ""
    TextBox1.SetFocus
    
    For i = 1 To Len(sSifre)
        Set cmbDug = sifre.Controls("c" & Mid(sSifre, i, 1))
        cmbDug.Left = col(cmbDug.Name)
        cmbDug.Top = 285
    Next i
    
    Set cmbDug = Nothing
    
End Sub
Private Sub cgeri_Click()
    
    Dim cmbDug As Control
    Dim sGeriGelecekDugme As String
    
    With TextBox1
        If Len(.Text) > 0 Then
            .Text = Left(.Text, Len(.Text) - 1)
            .SetFocus
            sGeriGelecekDugme = Right(sSifre, 1)
            sSifre = Left(sSifre, Len(sSifre) - 1)
            
            For Each cmbDug In sifre.Controls
                If TypeOf cmbDug Is MSForms.CommandButton Then
                    If cmbDug.Caption = sGeriGelecekDugme Then
                        cmbDug.Left = col(cmbDug.Name)
                        cmbDug.Top = 285
                    End If
                End If
            Next
        
        End If
    End With
End Sub

Private Sub CommandButton1_Click()
If TextBox1.Text = "0000" Then
    Unload Me
    Application.Visible = True
    Sheets("ana sayfa").Select
    Sheets("ana sayfa").ScrollArea = "a1:s46"
Else
    MsgBox " Gecersiz sifre!", vbCritical, " KAPUCU "
    TextBox1.Text = ""
    TextBox1.SetFocus
    Call cc_Click
End If
End Sub
Ayrıca, ekteki dosyayı inceleyiniz.
 

Ekli dosyalar

Üst