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

algerian

Altın Üye
Katılım
10 Haziran 2014
Mesajlar
45
Excel Vers. ve Dili
Excel365 İngilizce
Altın Üyelik Bitiş Tarihi
20-03-2025
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.
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,058
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
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:

algerian

Altın Üye
Katılım
10 Haziran 2014
Mesajlar
45
Excel Vers. ve Dili
Excel365 İngilizce
Altın Üyelik Bitiş Tarihi
20-03-2025
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:

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,058
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
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
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,058
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Yada boş bir hücreye örneğin "x" yazın. Hücrede "x" varsa kodları çalıştırmayacak bir koşul ekleyin.
 

algerian

Altın Üye
Katılım
10 Haziran 2014
Mesajlar
45
Excel Vers. ve Dili
Excel365 İngilizce
Altın Üyelik Bitiş Tarihi
20-03-2025
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.
 

ÖmerFaruk

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2017
Mesajlar
4,779
Excel Vers. ve Dili
Microsoft 365 Tr-64
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
 

algerian

Altın Üye
Katılım
10 Haziran 2014
Mesajlar
45
Excel Vers. ve Dili
Excel365 İngilizce
Altın Üyelik Bitiş Tarihi
20-03-2025
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.
 

ÖmerFaruk

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2017
Mesajlar
4,779
Excel Vers. ve Dili
Microsoft 365 Tr-64
Şö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
 

algerian

Altın Üye
Katılım
10 Haziran 2014
Mesajlar
45
Excel Vers. ve Dili
Excel365 İngilizce
Altın Üyelik Bitiş Tarihi
20-03-2025
Şö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
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,058
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
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:
Üst