bulk transfer of comments using a range

D

DB042188

I'm trying to add comments to a range rather than one by one as follows...

Range(Cells(lRow, lOrigCol), Cells(lRow, lCol)).Comment = aRowComment

....in an effort to get better run times but get the following error

object variable or with block variable not set

....when I append .Text on the end of the command I get a compile error
saying assignment to a constant not permitted

aRowComment is an array of comments, built similarly to the array of values
currently transferring to the range with no problems.
 
D

Dave Peterson

I think you're going to have to loop through the cells and loop through the
comments.

Dim aRowComment As String
Dim myCell As Range
dim cCtr as long
dim aRowComment as variant

arowcomment = array("test","test2","test3")

cctr = lbound(arowcomment)
With ActiveSheet
with .Range(.Cells(lRow, lOrigCol), .Cells(lRow, lCol))
if .cells.count <> ubound(arowcomment) - lbound(arowcomment) + 1 then
'not enough comments for all the cells!
exit sub
end if

'clear existing comments
.ClearComments
For Each myCell In .Cells
myCell.AddComment Text:=aRowComment(cctr)
cctr = cctr + 1
Next myCell
End With
End With

I have no idea if this puts the comments where you want them--test it before you
trust it.

You may want to loop through each row--or loop through each column.
 
D

DB042188

Dave, I'm trying to speed things up, is your solution faster than what we
already do which is to add them one by one as they come up thru a call to
something like ...

Private Sub InsertComment(lCol As Long, lRow As Long, sType As String,
sValue As String, lColor As Long)
Dim sTmpCell As String
Dim sComment As String

Const PROC_NAME = "InsertComment"

On Error GoTo ERR_HANDLER

sTmpCell = GetCellAddress(lCol, lRow)

With Range(sTmpCell)
If .Comment Is Nothing Then
.AddComment
.Comment.Text Text:=sType & sValue & vbNullString
Else
sComment = .Comment.Text
.Comment.Text Text:=sComment & vbLf & sType & sValue & vbNullString
End If
.Comment.Visible = False
.Comment.Shape.TextFrame.Characters.Font.Size = 8
.Comment.Shape.TextFrame.Characters.Font.Bold = False
.Comment.Shape.TextFrame.Characters.Font.Color = vbBlue
End With

Exit Sub

ERR_HANDLER:
Call AppError(err, MODULE_NAME, PROC_NAME)

End Sub

?
 
D

Dave Peterson

They look pretty much equivalent to me. I would suspect that you wouldn't
notice a difference.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top