• DİKKAT

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

Textbox'tan Cell Comment'e yazmak & Vice Versa

Katılım
9 Kasım 2009
Mesajlar
16
Excel Vers. ve Dili
MS Office 2003 - EN
Merhabalar,

Bir Excel VBA kod yaziyorum.
Yazdigim kod comment iceren hucrelerin uzerini tikladigimda comment iceriklerini -daha iyi bir goruntu elde edebilmek icin- sayfanin en ustunde ayri bir textbox'ta gosteriyor. Onceden olusturulmus sabit bir textbox var ve her hucredeki comment'in icerigine gore textbox'un da icerigi -dogal olarak- degisiyor. Secilen hucre comment icermiyorsa, textbox gozukmuyor (.visible = False)

Bir adim daha ileri gitmek istiyorum; soyleki, textbox'tan yaptigim degisikligin cell comment'e aninda yansimasini istiyorum.
Ne yazik ki durum onceki yazdigim kodun tam tersi bir durum olarak gozukse de sanildigi kadar kolay degilmis. yani textbox'u manuel olarak editledigimde bunu hucre comment'ine yansitamiyorum.

Sorunun cozumu adina gerceklestiremedigim ve sizin yardiminizi istedigim bir onermem var. Acaba textbox'a girdigim yaziyi (characteri, vs.) aninda detect edip kaydedebilecek ve boylece uzerinde durulan cell'in comment'ine bu yaziyi girebilecek ayri bir VBA kod yazabilir miyim?


Simdiden tesekkur ederim.
Saygilarimla,

Mithat

P.S. Worksheet_Selection_Change event'i kullanarak yapiyorum, belki bilmenizin faydasi olabilir.
 
Linki inceleyin, iki konu birbirine benzer görünüyor.
http://www.excel.web.tr/showthread.php?t=75882

Hamit bey cevabiniz icin tesekkurler.

Bu konuyu acmadan once sizin yaptiklarinizi inceledim.
Yalniz benim durumum farkli, soyle ki:

Halihazirda yazilmis bir veriyi textbox'tan comment'e aktarabiliyorum. Fakat textbox secildiginde, veriler otomatik olarak secili hucrenin comment'inden geldiginden textbox'ta yaptigim degisikligi alabilmem icin baska birsey gerekiyor.
Kullanicidan prompt ile almayi da istemiyorum, zaten bu macroyu gelistirmemin asil nedeni de o.

Ayrica textbox change private sub'i excel 2003'te yok, onu daha once arayip bulamamistim.

Umarim durumumu sizin icin acik hale getirmisimdir.

Saygilar,
Mithat
 
Küçük bir dosya ekleyin, yapmak istediğiniz şekli de belirtin.
 
Merhaba hamit bey,

Dosyada da gorecegeniz uzere benim yazdigim kod, comment iceren hucrelere tikladiginizda sayfanin en tepesinde ayri kutular acarak bilgileri orada daha gorunur hale getiriyor.

Benim eklemek istedigim ozellik ise comment iceren hucreye tikladigimda acilan kutucuklar uzerinde yaptigim degisikliklerin kalici olmasini saglamak, yani textbox'tan yaptigim edit'in mevzubahis hucrenin comment'ine de yansimasi.

Bu sabah recordset gibi bir kavramdan haberdar oldum, su anda onun uzerine bilgi edinmeye calisiyorum fakat "sql, db, etc." hakkinda bilgim hic olmadigi icin nasil yapacagimi bir turlu kestiremiyorum.

Klavyeden herhangi bir karakter girdigimde anladigim kadariyla excel'in "copy buffer"ina kaydediliyor. Acaba buradan, girdigim bilgileri cekebilir miyim diye dusunuyorum. Sizce yapilabilir mi?

Belki size bir yol gosterici olur sorunun nasil cozulecegi konusunda.

Zamaniniz icin simdiden cok tesekkur ederim,
Iyi calismalar.

Mithat
 

Ekli dosyalar

Kod:
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
    
    On Error Resume Next
      
    If Target.Comment.Text = "" Then
        SetVisible (False)
    Else
        SetVisible (True)

        Shapes("TextField").TextFrame.Characters.Text = Cells(Target.Row, 1).Text
        Shapes("TextWeek").TextFrame.Characters.Text = Cells(10, Target.Column).Text
         
        On Error Resume Next
        
        With Shapes("TextReport")
        .TextFrame.Characters.Text = Target.Comment.Text
        
[b] [COLOR=RED] .OnAction = "ShapeClick" [/COLOR][/B]
        
        End With
        
        Shapes("TextReport").TextFrame.AutoSize = True
        
        If Shapes("Rectangle1").Width < Shapes("TextReport").Width Then
        
        Shapes("Rectangle1").Width = Shapes("TextReport").Width + 2
        
        End If
               
        
        
        Dim Factor As Integer
        MaxChars = 150
        ExpChars = 35
        ExpHeight = 20
        
    End If
     
End Sub

Aşağıdaki kodu Module1 içine ekleyin.
Kod:
Sub ShapeClick()
 With ActiveSheet.Shapes("TextReport")
      ActiveCell.Comment.Delete
      ActiveCell.AddComment
      ActiveCell.Comment.Text Text:=.TextFrame.Characters.Text
 End With
End Sub
 
Hamit bey merhaba.

Cevabiniz icin cok tesekkur ederim, fakat belirttiginiz kodlari ilgili yerlere yapistirdiktan sonra mevzubahis textbox'in uzerine gelince 'hand' tool cikiyor ve left-click yapinca herhangi birsey olmuyor.
Saga tiklayip bir sekilde edit dedigimde ise yaptigim degisiklik kaydolmuyor.

Nabacagimi bilemedim acikcasi...:(
 
Galiba haklısınız. Bu sefer farklı bir çözüm ürettim.
 

Ekli dosyalar

Hamit bey oncelikle cok tesekkurler, sizi ugrastirdim.
Ellerinize saglik, pratik bir cozum olmus.
Herhalde bunu benim istedigim sekilde cozmek mumkun degil, ille de harici bir tool (user form, inputbox, etc) kullanmak gerekiyor.
Yalniz suna bir cozum bulabiliriz herhalde: yazilan text direk append olsun yani varolan text korunup userform'dan girilen data dogrudan yeni bir satirda textbox'ta gorunsun.

Varolan AddTextToShape fonksiyonumda append ozelligi var. bAppend True olarak verilirse append oluyor:

Function AddTextToShape(sName As String, sText As String, Optional bAppend As Boolean)
' Add or appends text to a shape
Dim i As Long
Dim iBeg As Long

With ActiveSheet.Shapes(sName)
' Append text
If bAppend Then
iBeg = .Characters.Count
Else
.Characters(1, .Characters.Count).Delete
End If
For i = 1 To Len(sText) Step 255
.Characters(iBeg + i).Text = Mid(sText, i, 255)
Next i
End With
End Function


Bunu sizin olusturdugunuz module icinde kullanmak mumkun mu acaba? VBA'de yeniyim ne nerede kullanilir, neye musade var cok fazla bilmiyorum; o yuzden basinizi agritiyorum kusruma bakmayin.

Cok tesekkur ederim.
Saygilar,

Mithat
 
Bir de bu şekilde dener misiniz ?
Kod:
Private Sub TextBox1_Change()
If TextBox1 = Empty Then Exit Sub
      ActiveSheet.Shapes("TextReport").TextFrame.Characters.Text = TextBox1.Text
      ActiveCell.Comment.Delete
      ActiveCell.AddComment
      ActiveCell.Comment.Text Text:=TextBox1.Text
End Sub



Private Sub UserForm_Initialize()
    TextBox1 = ActiveCell.Comment.Text
End Sub
 
Cok guzel oldu tam istedigim gibi :)
Cok tesekkur ederim...Ellerinize ve emeginize saglik...

Simdi bu user form'a birer tane 'ok' ve 'cancel' buttonlari koymayi deneyecegim kullanisli olmasi icin :)
Daha sonra ise su meshur textbox'a asagi yukari kaymasini saglayacak bir scrollbar koymayi dusunuyorum.
Hepsi tamam oldugunda forumda paylasicam. En az yarisi sizin emeginiz olmus olacak :)

Tekrar tesekkurler, iyi aksamlar.
Saygilar,

Mithat

P.S. Bir ufak ricam olacak, bu kutucugumuzda yeni bir satir olusturmayi nasil basarabilirim?
 
Son düzenleme:
Acikliyim Hamit bey:
Olusturdugumuz userform'daki textbox'ta mesela yeni bir satir acmam gerekicek.
Fakat enter'a bastigimda bir satir asagi gitmiyor ne yazik ki. Bunu, o textbox'in ozelliklerinden mi ayarlamaliyim acaba?

Tesekkurler.
Mithat
 
Hakkımız geçtiyse helal olsun. Foruma sizin de katkılarınızı bekliyoruz.
 
Hamit bey tekrar merhaba :)

Bugun internette gezinirken karsima soyle birsey cikti:

http://vbebook.blogspot.com/2007/05/textboxda-deiiklik-yaplp-yaplmadn.html

TextBox’da Değişiklik Yapılıp Yapılmadığını Anlamak

Private TextCh As Boolean

Private Sub TextReport_Change()
TextCh = True
End Sub

Private Sub TextReport_Unload(Cancel As Integer)
If TextCh Then
If MsgBox("Degisiklikler kaydedilsin mi?", vbYesNo, "Kayit") = vbYes Then
TextCh = False
End If
End If
End Sub

Gerekli degisken degisikliklerini yaparak kodu calistirdim fakat ise yaramadi. Herhalde kullanimi ile ilgili benim yapamadigim birsey var.
Yukaridaki kod sizce bizim yaptigimiz calismada faydali olabilir mi?

Bir de textbox'lar ile ilgili problem yasiyorum. Eger vaktiniz olursa asagidaki post'a goz atmaniz mumkun mu?

http://www.excel.web.tr/showthread.php?t=76679

Cok tesekkur ederim.
Saygilarimla,

Mithat
 
Son düzenleme:
Öncelikle belirteyim; verdiğiniz kod VB de yazılmış, bununla birlikte, VB ve VBA kütüphaneleri de birbirinden farklıdır, dolayısıyla, VB de yazılmış bir kodu VBA ya uyarlamak gerekmektedir.
Verdiğiniz örneği düzenledim, bir de böyle deneyin.
Kod:
Dim TextCh As Boolean
Private Sub CommandButton1_Click()
    If TextCh Then
    If MsgBox("Degisiklikler kaydedilsin mi?", vbYesNo, "Kayit") = vbYes Then
    TextCh = False
    End If
End If

End Sub

Private Sub TextBox1_Change()
    TextCh = True
End Sub
 
Command button'u nereye koymaliyim acaba onu da belirtir misiniz?

Bir de Textbox1 olarak yazmissiniz, benim kafamdaki dusunce sizin olusturdugunuz Userform'daki "Textbox1" textbox'a degil de "TextReport" textbox'una -yani en tepede sari renkli textbox'a - girilen degisikligin kaydedilmesi...
 
Yaptığım formdan sonra, sayfada oluşturduğunuz şeklin, galiba bir önemi kalmadı. Size önerim, hücredeki açıklamayı, form üzerinden takip etmeniz. Bu şekilde içeriği değiştirmek de kolaylaşıyor zannedersem. Tabii ki, son gönderdiğiniz örneği de bu forma uyarlamalısınız. Kod içindeki butonu da bu forma eklemelisiniz. Umarım doğru açıklayabilmişimdir.
 
Geri
Üst