• DİKKAT

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

Hücreye tıklayınca çalışan makroyu CTRL tuşu ile birlikte kullanmak

Katılım
10 Haziran 2014
Mesajlar
45
Excel Vers. ve Dili
Excel365 İngilizce
Merhaba,
Kullandığım dosyada Worksheet_SelectionChange prosedürü ile tanımlamış olduğum hücrelere sol tıkladığımda makro çalışıyor ve ilgili UserForm açılıyor. Benim istediğim ise; bu işlemin sadece mouse tıklaması ile değil, Ctrl tuşu basılı iken hücreye tıkladığımda gerçekleşmesi. Bazen yanlışlıkla hücreye tıklıyorum. Makro çalıştığı için de eylemi geri alamıyorum. Bir önceki adıma gitmek için bile dosyayı yeniden açıp o ana kadar yaptıklarımı tekrarlamam gerekiyor.
Ne yapmam gerektiği konusunda yardımcı olabilirseniz çok sevinirim. İyi akşamlar.
 
Merhaba,
Kullandığım dosyada Worksheet_SelectionChange prosedürü ile tanımlamış olduğum hücrelere sol tıkladığımda makro çalışıyor ve ilgili UserForm açılıyor. Benim istediğim ise; bu işlemin sadece mouse tıklaması ile değil, Ctrl tuşu basılı iken hücreye tıkladığımda gerçekleşmesi. Bazen yanlışlıkla hücreye tıklıyorum. Makro çalıştığı için de eylemi geri alamıyorum. Bir önceki adıma gitmek için bile dosyayı yeniden açıp o ana kadar yaptıklarımı tekrarlamam gerekiyor.
Ne yapmam gerektiği konusunda yardımcı olabilirseniz çok sevinirim. İyi akşamlar.

Ctrl tuşuna basılı iken Excelde çoklu hücre seçimi yapılır. Dolayısıyla istediğiniz uygulamada bu tuşu kullanmak biraz riskli olur. Ayrıca sayfa üzerinde klavye işlemlerini kontrol eden olay prosedürleri mevcut değildir. Belki karmaşık API uygulamaları ile yapılabilir. Bence hücreyi seçtiğinizde işlem yapılmamasını başka bir koşula bağlayın.

Bir diğer önerimde userform açılışına kısayol tuşu bağlayabilirsiniz. Bunun içinde application.onkey metodunu araştırmanızı öneririm.
 
Son düzenleme:
Ctrl tuşuna basılı iken Excelde çoklu hücre seçimi yapılır. Dolayısıyla istediğiniz uygulamada bu tuşu kullanmak biraz riskli olur. Ayrıca sayfa üzerinde klavye işlemlerini kontrol eden olay prosedürleri mevcut değildir. Belki karmaşık API uygulamaları ile yapılabilir. Bence hücreyi seçtiğinizde işlem yapılmamasını başka bir koşula bağlayın.
Merhaba Levent Bey,
Yanıt için teşekkür ederim. Ctrl tuşu sedece önerdiğim bir seçenekti. Tam olarak amacım; doğrudan tıklamak değil kontrollü olmasını sağlamak. Acaba sizin önerebileceğiniz başka bir yöntem olabilir mi?
 
Moderatör tarafında düzenlendi:
Merhaba Levent Bey,
Yanıt için teşekkür ederim. Ctrl tuşu sedece önerdiğim bir seçenekti. Tam olarak amacım; doğrudan tıklamak değil kontrollü olmasını sağlamak. Acaba sizin önerebileceğiniz başka bir yöntem olabilir mi?

userform açılışına kısayol tuşu bağlayabilirsiniz. Bunun içinde application.onkey metodunu araştırmanızı öneririm. Örneğin aşağıdaki kodları thisworkbook sayfasına kopyalayın. Userformun açılışını Ctrl+a tuşuna bağlamış olursunuz.

Kod:
Private Sub Workbook_Open()
Application.OnKey "^a", "userformac"
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.OnKey "^a"
End Sub
 
Yada boş bir hücreye örneğin "x" yazın. Hücrede "x" varsa kodları çalıştırmayacak bir koşul ekleyin.
 
userform açılışına kısayol tuşu bağlayabilirsiniz. Bunun içinde application.onkey metodunu araştırmanızı öneririm. Örneğin aşağıdaki kodları thisworkbook sayfasına kopyalayın. Userformun açılışını Ctrl+a tuşuna bağlamış olursunuz.

Kod:
Private Sub Workbook_Open()
Application.OnKey "^a", "userformac"
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.OnKey "^a"
End Sub
Sayfada B11:B17 aralığında toplam yedi hücrenin her biri farklı bir userform açıyor. Dosyanın başka kullanıcıları da olduğunu düşününce userform açılışına kısayol tuşu bağlamam çok pratik olmayacak diye düşünmüştüm. Bu nedenle sol tıklama ile kombine edebileceğim bir çözüm arıyordum. Olmayacak gibi görünüyor. Teşekkürler ilginiz için. İyi akşamlar.
 
Alternatif olarak,
Userform açılışlarını DoubleClick olayıyla ilişkişlendirebilrisin,
Double click olayını da sadece ilgili hücrelerde ilgili userformları açmak için düzenleyebilirsiniz
 
Alternatif olarak,
Userform açılışlarını DoubleClick olayıyla ilişkişlendirebilrisin,
Double click olayını da sadece ilgili hücrelerde ilgili userformları açmak için düzenleyebilirsiniz
Üstadım çok teşekkür ederim. Prosedürü BeforeDoubleClick olarak değiştirince oldu. Hücreye tek tıklama kazası çok oluyordu, ancak çift tıklama olmaz. İyi akşamlar.
 
Şöyle de bir Örnek hazırlamıştım.
Kitap içine 3 adet userform ekleyin.
Sayfa1 A1-B1-C1 hücrelerine de Userform1 -2-3 atadım saırasıyla.

A1 e çift tıklayınca Useform1, B1--Form2, C1--Form3 açılıyor.

Sayfanın kod sayfasına
C++:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Intersect(Target, Range("A1,B1,C1")) Is Nothing Then Exit Sub
    HücreRow = Target.Row
    HücreColumn = Target.Column
    Module1.UserformAc
End Sub

Module1 içine de
C++:
Public HücreRow
Public HücreColumn
Sub UserformAc()
If HücreRow = 1 And HücreColumn = 1 Then
    UserForm1.Show
ElseIf HücreRow = 1 And HücreColumn = 2 Then
    UserForm2.Show
Else
    UserForm3.Show
End If
End Sub
 
Şöyle de bir Örnek hazırlamıştım.
Kitap içine 3 adet userform ekleyin.
Sayfa1 A1-B1-C1 hücrelerine de Userform1 -2-3 atadım saırasıyla.

A1 e çift tıklayınca Useform1, B1--Form2, C1--Form3 açılıyor.

Sayfanın kod sayfasına
C++:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Intersect(Target, Range("A1,B1,C1")) Is Nothing Then Exit Sub
    HücreRow = Target.Row
    HücreColumn = Target.Column
    Module1.UserformAc
End Sub

Module1 içine de
C++:
Public HücreRow
Public HücreColumn
Sub UserformAc()
If HücreRow = 1 And HücreColumn = 1 Then
    UserForm1.Show
ElseIf HücreRow = 1 And HücreColumn = 2 Then
    UserForm2.Show
Else
    UserForm3.Show
End If
End Sub
Emek verip uğraşmışsınız. Teşekkür ederim. Ben sadece Private Sub satırını değiştirdim, kendi kodlarım çalıştı. Kodlarımın bir bölümünü aşağıya ekliyorum. Ancak sizin paylaştığınız kodlar işime çok yarayacak. Çok daha kısa kod satırı ile amaca ulaşılabiliyormuş.
Kod:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
        Application.ScreenUpdating = False
        Dim SS As Worksheet: Set SG = Sheets("Generator")
    If Target.Row < 10 Then
        'Unload UserForm1
        'Unload UserForm2
        'Unload UserForm3
    End If
    If Target.Row > 16 Then
        'Unload UserForm1
        'Unload UserForm2
        'Unload UserForm3
    End If
If Target.Row = 11 Then
    If Target.Column = 2 Then
        If ActiveCell.Value <> "" Then
        Application.ScreenUpdating = False
        SG.Select
        Application.ScreenUpdating = True
        UserForm1.Show
        Else: 'Unload UserForm1
        End If
    Else
        'Unload UserForm1
    End If
Else
End If
If Target.Row = 12 Then
    If Target.Column = 2 Then
        If ActiveCell.Value <> "" Then
        Application.ScreenUpdating = False
        SG.Select
        Application.ScreenUpdating = True
        UserForm2.Show
        Else: 'Unload UserForm2
        End If
    Else
        'Unload UserForm2
    End If
Else
End If
If Target.Row = 13 Then
    If Target.Column = 2 Then
        If ActiveCell.Value <> "" Then
        Application.ScreenUpdating = False
        SG.Select
        Application.ScreenUpdating = True
        UserForm3.Show
        Else: 'Unload UserForm3
        End If
    Else
        'Unload UserForm3
    End If
Else
End If
End Sub
 
Alternatif olarak,
Userform açılışlarını DoubleClick olayıyla ilişkişlendirebilrisin,
Double click olayını da sadece ilgili hücrelerde ilgili userformları açmak için düzenleyebilirsiniz

En pratik çözüm Ömer beyin önerisi olmuş. Tavsiyem kodlardaki intersect'li satırdan sonra cancel=true satırını eklemenizdir. Böylece çift tıklayınca imleç hücre içine girmez.
 
Son düzenleme:
Geri
Üst