2017-02-15 139 views
0

我有几张表单,我想阅读每张表单的所有注释。 我设法得到的评论,但我可以得到的是同一行和列的注释单元格的第一个单元格。(附图)VBA - 选择注释单元格时获取第一个单元格

绿色 - 所需的单元格值。

enter image description here

Sub ShowCommentsAllSheets() 
    'Update 20140508 
    Dim commrange As Range 
    Dim rng As Range 
    Dim ws As Worksheet 
    Dim newWs As Worksheet 
    Set newWs = Application.Worksheets("CRs") 
    newWs.Range("A1").Resize(1, 4).Value = Array("Sheet", "A", "Value", "Comment") 
    Application.ScreenUpdating = False 
    On Error Resume Next 
    For Each ws In Application.ActiveWorkbook.Worksheets 
     Set commrange = ws.Cells.SpecialCells(xlCellTypeComments) 
     If Not commrange Is Nothing Then 
      i = newWs.Cells(Rows.Count, 1).End(xlUp).Row 
      For Each rng In commrange 
       i = i + 1 
       newWs.Cells(i, 1).Resize(1, 4).Value = Array(ws.Name, rng.Address, rng.Value, rng.Comment.Text) 
      Next 
     End If 
     Set commrange = Nothing 
    Next 
    newWs.Cells.WrapText = False 
    Application.ScreenUpdating = True 
    End Sub 
+0

仅供参考 - 如果'newWS'不是ActiveSheet,那么'Rows.Count'将在另一个工作表上运行。你应该(假设你想对'NewWS'中的行进行计数)将行更改为'i = newWs.Cells(newWS.Rows.Count,1).End(xlUp).Row'。你能得到Date单元吗?并想看看如何获​​得同一行的单元格,在列B? – BruceWayne

+0

你的代码是错误还是错误? @BruceWayne - 同意这是一个很好的做法,但是这实际上很重要,因为每张纸都有相同的行数? – SJR

+0

是的,我设法得到日期单元格,我想获得同一行的单元格。 – David

回答

1

也许只是改变这一行?

newWs.Cells(i, 1).Resize(1, 5).Value = Array(ws.Name, rng.Address, rng.Value, rng.Comment.Text, ws.Cells(rng.Row, 2)) 
+0

谢谢,作品完美! – David

相关问题