Excel VBA,如果新工作表所在的单元格可见,则在新工作表上显示注释

时间:2017-11-29 14:21:45

标签: excel vba excel-vba

标题很难完全满足我的需要,所以请阅读所有文字。

我正在尝试使用按钮创建一个工作表,该工作表将以易于理解的格式向用户显示所有工作表上的所有注释,该格式基本上充当工作簿的亮点。

问题是代码当前显示所有评论,但我只希望此人看到当前可见的评论。我的意思是什么?并非所有用户都能看到所有工作表或所有列和行。某些数据是隐藏的,因为它与它们无关。我只希望他们看到当前在任何可见的工作表上可见的数据。

示例(不是真实情况);一个excel文档有3张(Sheet1,Sheet2,Sheet3)。 John登录(使用隐藏他不需要的数据的Select Case VBA)并且可以看到Sheet1和Sheet2但看不到每个工作表中的特定行,例如Sheet1中的第2行和第F列以及Sheet2中的第5行和第K列。他不需要查看他看不到的行,列和表单的注释。

如何更改下面的代码,只显示他可以看到的单元格的注释?

注意:我没有创建此代码,只是采用了它,因为几乎符合我的需要。

    Sub ShowCommentsAllSheets()

  Application.ScreenUpdating = False

  Dim commrange As Range
  Dim mycell As Range
  Dim ws As Worksheet
  Dim newwks As Worksheet
  Dim i As Long

Set newwks = Worksheets.Add

 newwks.Range("A1:E1").Value = _
     Array("Sheet", "Address", "Name", "Value", "Comment")

For Each ws In ActiveWorkbook.Worksheets
  On Error Resume Next
  Set commrange = ws.Cells.SpecialCells(xlCellTypeComments)
  On Error GoTo 0

  If commrange Is Nothing Then

  Else

    i = newwks.Cells(Rows.Count, 1).End(xlUp).Row

    For Each mycell In commrange
       With newwks
         i = i + 1
         On Error Resume Next
         .Cells(i, 1).Value = ws.Name
         .Cells(i, 2).Value = mycell.Address
         .Cells(i, 3).Value = mycell.Name.Name
         .Cells(i, 4).Value = mycell.Value
         .Cells(i, 5).Value = mycell.Comment.Text
       End With
    Next mycell
  End If
  Set commrange = Nothing
Next ws


newwks.Cells.WrapText = False
newwks.Columns("E:E").Replace What:=Chr(10), _
  Replacement:=" ", LookAt:=xlPart, _
  SearchOrder:=xlByRows, MatchCase:=False, _
  SearchFormat:=False, ReplaceFormat:=False

Application.ScreenUpdating = True

End Sub

我相信我需要添加此代码来解决问题:

   Comments = 1
   For Each MyComments In ActiveSheet.Comments
       If MyComments.Visible = True Then
           Comments = 0
       End If
   Next
   If Comments = 1 Then
       Application.DisplayCommentIndicator = xlCommentAndIndicator
   Else
       Application.DisplayCommentIndicator = xlCommentIndicatorOnly
   End If

但是,我正在努力将其纳入代码中。我该怎么办?

0 个答案:

没有答案