Hücreye Bağlı Makro Çalıştırılması

Katılım
17 Mayıs 2005
Mesajlar
117
Excel Vers. ve Dili
2013 TR
2013 EN
Merhabalar Çalıştığım Bir dosyada hücreye bağlı makro çalışması ile sorgulama yapmasını istiyorum ama nasıl yapılacağını bulamadım,

Dosyanın Çalışma Prensibi şöyle,


B3 ve G3 satır sütun aralığında başlayarak X satıra XG kolona kadar veri aralığı bulunmakta (bu veriler sql den online olarak gelmekte) B Sütununda Cari hesap kodları mevcut,

Benim yapmak istediğim olay H sütununda kaçıncı satır da hücreye çift tıklanırsa, o satırın B Sütunundaki Koda göre sql filtresinden geçirmek istiyorum, Sql bağlantısı ve hücre adresini vermeyi yapabilirim ama aktif hücre satırının B sütunundaki kodu nasıl aldırabilirim bunu çözemedim,

sanırım biraz karışık anlatım oldu
 
Katılım
14 Şubat 2006
Mesajlar
3,426
Excel Vers. ve Dili
(Excel 2016 - İngilizce)
Altın Üyelik Bitiş Tarihi
30-11-2022
Yapmak istediğiniz H kolonuna tıkladığınızda B kolonundaki bilgi almak ise aşağıdaki kodları kullanabilirsiniz.

Kod:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
On Error Resume Next
If Intersect(Target, [H:H]) Is Nothing Then Exit Sub
veri = Cells(Target.Row, "b").Value
Cancel = True
MsgBox veri
End Sub
 
Katılım
17 Mayıs 2005
Mesajlar
117
Excel Vers. ve Dili
2013 TR
2013 EN
ilginiz için teşekkür ederim, bir sorum daha olacak, uygulamayı çalıştırdım bu alana kadar doğru ancak raporlama esnasında a1 hücresine (i değeri) verdiğim değeri devamlı artırmakta rapor içeriği gelmemekte kullandığım kodlar aşağıdaki gibi acaba nerede hata yapıyorum,




Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
On Error Resume Next
If Intersect(Target, [H:H]) Is Nothing Then Exit Sub
Veri = Cells(Target.Row, "b").Value
Sayfa9.Cells(1, 5).Value = Veri
Cancel = True
MsgBox Veri
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim SqlText As String
With conn
.Provider = "sqloledb"
.CommandTimeout = 1200
.ConnectionString = "Data Source= NETSIS;USER ID= rapor;PASSW=;AUTO TRANSLATE=FALSE"
.Open
.DefaultDatabase = "AU2007"
End With
SqlText = "SELECT CARIKOD,CARI_ISIM,CARI_ADRES,CARI_IL,CARI_ILCE,TARIH,HAREKET_TURU,ACIKLAMA,VADE_TARIHI,BORC,ALACAK,BAKIYE,SUBE_KODU"
SqlText = SqlText + " FROM CARIHAREKETOTR WHERE CARIKOD = '" & Sayfa9.Cells(1, 5).Value & "'"
rs.Open SqlText, conn, adOpenStatic, adLockReadOnly
Sayfa9.Activate
Cells(9, 2).AutoFilter
Sayfa9.Range("B10:Z1000").ClearContents
i = 10
Do While Not rs.EOF
Sayfa9.Cells(1, 1).Value = i 'SATIR DEĞERİ ATAMA
'CARİ SABİT BİLGİLERİ YAZDIRMA
Sayfa9.Cells(3, 3).Value = rs(0)
Sayfa9.Cells(4, 3).Value = rs(1)
Sayfa9.Cells(6, 3).Value = rs(2)
Sayfa9.Cells(7, 3).Value = rs(3)
Sayfa9.Cells(7, 6).Value = rs(4)
'CARİ HAREKETLERİ YAZDIRMA
Sayfa9.Cells(i, 2).Value = rs(5)
Sayfa9.Cells(i, 3).Value = rs(6)
Sayfa9.Cells(i, 4).Value = rs(7)
Sayfa9.Cells(i, 5).Value = rs(8)
Sayfa9.Cells(i, 6).Value = rs(9)
Sayfa9.Cells(i, 7).Value = rs(10)
rs.MoveNext
i = i + 1
Loop
rs.Close
conn.Close
Set rs = Nothing
Set conn = Nothing
End Sub
 
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
Aşağıdaki do while döngüsünün sonunda i'nin değerini artırıyorsunuz zaten... Eğer sorgunuz, birden fazla sayıda; recordset'e kayıt depoluyorsa, i'nin değeri artar. Hiçbir zaman artmasın diyorsanız; do - loop aralığından i=i+1 satırını kaldırın. Eğer farklı satırlara recordset'le birlikte; "i" değerini de yazmasını istiyorum diyorsanız; i=i+1 kalsın, diğerini şöyle değiştirin "Sayfa9.cells(i,1).value=i"

Kod:
Do While Not rs.EOF
Sayfa9.Cells(1, 1).Value = i 'SATIR DEĞERİ ATAMA
.......
.......
i = i + 1
Loop
 
Katılım
17 Mayıs 2005
Mesajlar
117
Excel Vers. ve Dili
2013 TR
2013 EN
ilginiz için tekrar dan teşekkür ediyorum ancak bu seferde a10 dan başlayarak alt satırlara i değerini artırarak yazmakta,

benim tablomdaki CARİ SABİT BİLGİLERİ YAZDIRMA alanındaki tanımlar hep aynı yerde yazılacak ancak hareket bilgileri hareket sayısına göre artacağından (i) değeri vermek gerekiyor, ancak bir türlü başaramadım,
 
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
Kodlarınızdan anladığım kadarıyla; "E1" hücresine yazdığınız Cari Kod'a ait bilgileri getirmek istemektesiniz. Çekmek istediğiniz verilere bakılırsa da; muhtemelen, bu sorgu tek bir değer döndürecek. Yani sorgu bir defa işlendiğinden, Recordset'e tek bir satır kayıt atılacak. DOĞRU MUDUR?

Eğer böyleyse; Do ... Loop döngüsüne gerek yok. Zaten tek kayıt çekecek ve siz, belirli hücrelere RS alanlarını yazdıracaksınız.

Eğer anladığım doğruya; şunu deneyin.

Kod:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
On Error Resume Next
If Intersect(Target, [H:H]) Is Nothing Then Exit Sub
Veri = Cells(Target.Row, "b").Value
Sayfa9.Cells(1, 5).Value = Veri
Cancel = True
MsgBox Veri
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim SqlText As String
With conn
.Provider = "sqloledb"
.CommandTimeout = 1200
.ConnectionString = "Data Source= NETSIS;USER ID= rapor;PASSW=;AUTO TRANSLATE=FALSE"
.Open
.DefaultDatabase = "AU2007"
End With
SqlText = "SELECT CARIKOD,CARI_ISIM,CARI_ADRES,CARI_IL,CARI_ILCE,TAR IH,HAREKET_TURU,ACIKLAMA,VADE_TARIHI,BORC,ALACAK,B AKIYE,SUBE_KODU"
SqlText = SqlText + " FROM CARIHAREKETOTR WHERE CARIKOD = '" & Sayfa9.Cells(1, 5).Value & "'"
rs.Open SqlText, conn, adOpenStatic, adLockReadOnly
Sayfa9.Activate
Cells(9, 2).AutoFilter
Sayfa9.Range("B10:Z1000").ClearContents
i = 10
Sayfa9.Cells(1, 1).Value = i 'SATIR DEĞERİ ATAMA
'CARİ SABİT BİLGİLERİ YAZDIRMA
Sayfa9.Cells(3, 3).Value = rs(0)
Sayfa9.Cells(4, 3).Value = rs(1)
Sayfa9.Cells(6, 3).Value = rs(2)
Sayfa9.Cells(7, 3).Value = rs(3)
Sayfa9.Cells(7, 6).Value = rs(4)
'CARİ HAREKETLERİ YAZDIRMA
Sayfa9.Cells(i, 2).Value = rs(5)
Sayfa9.Cells(i, 3).Value = rs(6)
Sayfa9.Cells(i, 4).Value = rs(7)
Sayfa9.Cells(i, 5).Value = rs(8)
Sayfa9.Cells(i, 6).Value = rs(9)
Sayfa9.Cells(i, 7).Value = rs(10)
rs.Close
conn.Close
Set rs = Nothing
Set conn = Nothing
End Sub
 
Katılım
17 Mayıs 2005
Mesajlar
117
Excel Vers. ve Dili
2013 TR
2013 EN
evet öncelikle ben sorguda satır ve sütun numarasını belirttiğim alanlara cari hesap bilgileri buraya değerleri gelecek,

ancak (i, ) olarak belirttiğim alanlarada Cari hareket bilgileri gelecek yani cari hesapta kaç hareket var ise o kadar döngü yapması gerekecek, sizin son vermiş olduğunuz kodları aynen yapıştırdığımda cari kart bilgileride hareket bilgileride raporlanmıyor gene sadece sayfaya geçiş yapıyor,
 
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
Nasıl bir rapor istediğinizi, örnek bir excel sheet'i ile gönderir misiniz, lütfen ?
 
Katılım
17 Mayıs 2005
Mesajlar
117
Excel Vers. ve Dili
2013 TR
2013 EN
ilginiz için teşekkür ediyorum farkındayım sizleri fazlaca yordum,

almak istediğim rapora ilişkin örnek ektedir,

saygılar,
 
Son düzenleme:
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
Kodlarınızı aşağıdaki gibi değiştirin. Muhtemelen çalışması lazım. Çünkü benim deneme şansım yok.

Kod:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'On Error Resume Next
If Intersect(Target, [H:H]) Is Nothing Then Exit Sub
    Veri = Cells(Target.Row, "b").Value
    Sayfa9.Cells(1, 5).Value = Veri
    Cancel = True
    MsgBox Veri
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim SqlText As String
With conn
    .Provider = "sqloledb"
    .CommandTimeout = 1200
    .ConnectionString = "Data Source= NETSIS;USER ID= rapor;PASSW=;AUTO TRANSLATE=FALSE"
    .Open
    .DefaultDatabase = "AU2007"
End With
SqlText = "SELECT " & "CARIKOD," _
                    & "CARI_ISIM," _
                    & "CARI_ADRES," _
                    & "CARI_IL," _
                    & "CARI_ILCE," _
                    & "TARIH," _
                    & "HAREKET_TURU," _
                    & "ACIKLAMA," _
                    & "VADE_TARIHI," _
                    & "BORC," _
                    & "ALACAK," _
                    & "BAKIYE," _
                    & "SUBE_KODU"
SqlText = SqlText + " FROM CARIHAREKETOTR WHERE CARIKOD = '" & Sayfa9.Cells(1, 5).Value & "'"
rs.Open SqlText, conn, adOpenStatic, adLockReadOnly
Sayfa9.Activate
Cells(9, 2).AutoFilter
Sayfa9.Range("B10:Z1000").ClearContents
'Başlıkları oluşturma
    Sayfa9.Cells(3, 4).Value = rs(0) 'CariKod
    Sayfa9.Cells(4, 4).Value = rs(1) 'CariAD
    Sayfa9.Cells(6, 4).Value = rs(2) 'CariAdres
    Sayfa9.Cells(7, 4).Value = rs(3) 'Cariİl
    Sayfa9.Cells(7, 6).Value = rs(4) 'Cariİlçe
i = 10
'Detay tablosu oluşturma
Do While Not rs.EOF
    Sayfa9.Cells(i, 2).Value = rs(5) 'Tarih
    Sayfa9.Cells(i, 3).Value = rs(6) 'HareketTürü
    Sayfa9.Cells(i, 4).Value = rs(7) 'Açıklama
    Sayfa9.Cells(i, 5).Value = rs(8) 'VadeTarihi
    Sayfa9.Cells(i, 6).Value = rs(9) 'Borç
    Sayfa9.Cells(i, 7).Value = rs(10) 'Alacak
    Sayfa9.Cells(i, 8).Value = rs(11) 'Bakiye
    Sayfa9.Cells(i, 9).Value = rs(12) 'ŞubeKodu
    rs.MoveNext
    i = i + 1
Loop
    Sayfa9.Cells(1, 1).Value = i 'SATIR DEĞERİ ATAMA
rs.Close
conn.Close
Set rs = Nothing
Set conn = Nothing
End Sub
 
Katılım
17 Mayıs 2005
Mesajlar
117
Excel Vers. ve Dili
2013 TR
2013 EN
ilginiz için teşekkür ediyorum, yine hata verdi sizi bu konuyla alakadar olarak yorduğum yeter, affınıza sıgınıyorum, hata mesajına ait resim ekte, ama bu konuyu daha fazla uzatıp sizleri meşgul etmek istemiyorum, çok teşekkürlerimi sunuyorum,
 
Son düzenleme:
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
sql komut stringinde muhtemelen bir hata var. Çünkü, hata; Recorset'in boş olmasından kaynaklanıyor. Beni yazdığım sqltext satırlarını ilerek, sizin daha önce kullandıklarınızı yazın (Sadece bu iki satır için)

Eğer yine de hata alıyorsanız, "sqltext=" satırlarını daha dikkatli inceleyip alan ve table isimlerinin doğru olduğunu, where koşulunun sağlanıp sağlanmadığını test etmelisiniz.
 
Üst