VBA:宏显示在单元格中选择的特定值的红色圆圈

时间:2017-05-17 00:59:47

标签: vba excel-vba formatting conditional excel

我被要求在用户选择的特定单元格值周围显示红色圆圈形状:在我的示例中,如果用户选择值1,2或3.如果是4或5,则只有4或5应该显示。我尝试了一些建议的在线技巧,但我终于陷入无休止的循环。

我遇到的一些要求/问题: 1.我想要覆盖一系列细胞,而无需编写特定的细胞系来处理每个细胞。

  1. 我遇到的另一个问题是红圈仍处于选中状态。我希望用户无法格式化或触摸它。它只是难以选择数值。圆圈不应该重新调整大小,而是保持在单元格框的中心。

  2. 最后,我不想在电子表格之外存储红色圆圈的图片。希望我不想在不同的纸张上存储100个相同的红色圆圈形状。这与前面提到的问题1有关。

  3. 非常感谢任何帮助。到目前为止我的代码:

    Private Sub Worksheet_Calculate()
        Dim area As Range
        Dim cell As Range
        Set area = Range("B4:E5")
    
        HideSignals
        Select Case cell
            Case 1: Shapes("redCircle").Visible = msoTrue
            Shapes("redCircle").Select
            With Selection
                .Left = Range(cell).Left + (Range(cell).Width - Selection.Width) / 2
                .Top = Range(cell).Top + (Range(cell).Height - Selection.Height) / 2
            End With
            ActiveSheet.Range(cell).Select
            Case 2: Shapes("redCircle").Visible = msoTrue
            Shapes("redCircle").Select
            With Selection
                .Left = Range(cell).Left + (Range(cell).Width - Selection.Width) / 2
                .Top = Range(cell).Top + (Range(cell).Height - Selection.Height) / 2
            End With
            ActiveSheet.Range(cell).Select
            Case 3: Shapes("redCircle").Visible = msoTrue
            Shapes("redCircle").Select
            With Selection
                .Left = Range(cell).Left + (Range(cell).Width - Selection.Width) / 2
                .Top = Range(cell).Top + (Range(cell).Height - Selection.Height) / 2
            End With
            ActiveSheet.Range(cell).Select
        End Select
    End Sub
    ----------------------------------------------------------------------
    Sub HideSignals()
        Shapes("redCircle").Visible = msoFalse
    End Sub
    --------------------------------------------------------------
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim area As Range, cell As Range
        Set area = Range("B4:E5")
    
        If Target.Address = area.Address Then
            For Each cell In area.Cells
                Worksheet_Calculate
            Next cell
        End If
    End Sub
    

0 个答案:

没有答案