cell comment

  • Thread starter Thread starter Jack Sons
  • Start date Start date
J

Jack Sons

Hi all,

A1 has a cell comment containing a number, say, 5 (or is content of a
comment "text" by default?)
If I enter a value (number) in A1 (say 7) I want after the entry the cell
content to be the sum of the original content (5) and the entry in A1, so
after that in A1 is 7 and in the cell comment is 12.

I tried all kinds of things, succeeded in putting cell content in comment,
also adding cell comment to cell content, but not what I described above
(adding cell content to comment).

Your help will be appreciated.

Jack Sons
The Netherlands
 
Anonymous,

To my regret I found nothing on work done to comments regarding numbers.

You or anybody else got a solution?

Jack.
 
You could set up a procedure using the worksheet change event.
Get the comment text (do you want to automatically add one if there isn't
one there?) and use cint() or similar to convert it to a number.
Add the current value of the cell to that, and set the comment text to
cstr(sum_of_numbers)

tim.
 
I was able to use the following code to do what you want (this had to be run
as a standard macro, though, putting in a Event procedure causes it to loop
and produce unwanted resuts).

Sub AddComment()
Dim Commentval As Double
Dim cmt As Comment
Set cmt = ActiveCell.Comment
If ActiveCell.Comment.Text <> "" Then
Commentval = CDbl(cmt.Text)
ActiveCell.Value = ActiveCell.Value + Commentval
Commentval = ActiveCell.Value
ActiveCell.Comment.Text CStr(Commentval)
End If
End Sub
 
When used in an event procedure you could do this:

application.enableevents=false
'do your update
application.enableevents=true

But make sure if there's any error in the code you re-enable event handling
in the error handler.


A slightly better approach (I think) is to use a procedure-level flag to
prevent "reentry"


sub object_event()

static bInProgress as boolean

if bInProgress then exit sub

bInProgress = true
'do stuff which might trigger object_event
bInProgress = false

end sub

This way you're not interfering with other events you might still want to
fire.

Tim.
 
Bob,

I tried, but it halts at the line
If ActiveCell.Comment.Text <> "" Then
with the error message "object variable or block variable With is not set"
(I translated from Dutch, sounds a bit clumsy I'm afraid).
What now?

Jack.
 
Most likely the cell does not have a comment. You'll have to catch the
error and create one.

Dim cmt As Comment

on error resume next
Set cmt = ActiveCell.Comment
on error goto 0

if cmt is nothing then
'add a comment with "0" as text
Set cmt = ActiveCell.AddComment(Text:="0")
end if
'etc.....
 
Tim,

The code below works, but I want it to be executed automatically when a cell
gets a new entry. So if I click on the cell with in its comment the number
12 and then click key 5 of the number part of the keybord and after that of
course "enter", then I want this procedure to be executed (which means after
execution the cell shows the number 5 and the comment shows 17. I suppose it
will be a kind of _Change procedure, but I don't now what it should be.
Please show me the way.

Jack.

Sub AddComment()
Dim Commentval As Double
Dim cmt As Comment

On Error Resume Next
Set cmt = ActiveCell.Comment
On Error GoTo 0

If cmt Is Nothing Then
'add a comment with "0" as text
Set cmt = ActiveCell.AddComment(Text:="0")
End If

NewEntry = ActiveCell.Value

If ActiveCell.Comment.Text <> "" Then
Commentval = CDbl(cmt.Text)
ActiveCell.Value = ActiveCell.Value + Commentval
Commentval = ActiveCell.Value
ActiveCell.Comment.Text CStr(Commentval)
End If

ActiveCell.Value = NewEntry

End Sub
 
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

Dim cmt As Comment

If Target.Cells.Count > 1 Then Exit Sub

On Error Resume Next
Set cmt = Target.Comment
On Error GoTo 0

If cmt Is Nothing Then
Set cmt = Target.AddComment(Text:="0")
End If

If cmt.Text <> "" Then
cmt.Text CStr(Target.Value + CDbl(cmt.Text))
End If

End Sub
 
Tim,

That is it, thank you very much.

Jack.

Tim Williams said:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

Dim cmt As Comment

If Target.Cells.Count > 1 Then Exit Sub

On Error Resume Next
Set cmt = Target.Comment
On Error GoTo 0

If cmt Is Nothing Then
Set cmt = Target.AddComment(Text:="0")
End If

If cmt.Text <> "" Then
cmt.Text CStr(Target.Value + CDbl(cmt.Text))
End If

End Sub
 
Back
Top