插入细胞中的SHAPE阻碍细胞选择

时间:2016-02-04 10:31:37

标签: excel vba

我有一个在单元格中插入形状的代码。

假设我在单元格A1中插入形状并想在该单元格中写入" 5"。

插入形状后,无法选择鼠标悬停的单元格,因为形状与其重叠。我只能选择形状。或者,如果我使形状无法选择,我既不能选择形状,也不能选择单元格。

为了写" 5"在A1中,我必须选择例如单元格B1和键盘箭头< - 移动到单元格A1。然后就行了。

是否可以插入不仅无法选择的形状,还可以完全忽略鼠标悬停的形状?这意味着形状应该是细胞背后的某种形状,但仍然可见。因此,当您选择具有形状的单元格时,单元格将选择优先级为100%。

Set Shp = ActWS.Shapes.AddShape(msoShapeOval, _
   ActWS.Cells(rActPlan - 1, vReturnColumn).Left, _
   ActWS.Cells(rActPlan - 1, vReturnColumn).Top, _
   ActWS.Cells(rActPlan - 1, vReturnColumn).Width, _
   ActWS.Cells(rActPlan - 1, vReturnColumn).Height)
Shp.Fill.Visible = msoFalse
With Shp.Line
    .Visible = msoTrue
    .ForeColor.RGB = RGB(0, 255, 0)
    .Transparency = 0
    .Weight = 2.25
End With

2 个答案:

答案 0 :(得分:0)

如果您只需要选择特定单元格,则可以将单元格定义为可编辑,如下所示。 之后,您可以保护工作表并仅允许选择锁定和/或解锁的单元格。如果您需要程序化解决方案,请告诉我。

enter image description here

enter image description here

答案 1 :(得分:0)

据我所知,你不能创造一个形状"背后"一个细胞。但是,您可以执行的操作是每次选择形状时触发事件。可以设置此事件以选择形状后面的单元格。可以在此answer中找到此实现。 (其他知识here)。

在您的代码中添加以下子代码:

Sub SelectCell(Sht As String, Address As String)
    ThisWorkbook.Sheets(Sht).Range(Address).Select
End Sub

此过程将简单地选择指定工作表上的指定单元格。我们可以使用.OnAction设置一个形状来运行此宏。我们只需告诉形状使用我们所需的参数(工作表名称和单元格地址)运行SelectCell宏。要将指定单元格的参数传递给形状,请添加以下代码:(我假设ActWS是您的活动工作表)

    Shp.OnAction = "'SelectCell" & Chr(34) & ActWS.Name _
        & Chr(34) & ", " & Chr(34) _
        & ActWS.Cells(rActPlan - 1, vReturnColumn).Address _
        & Chr(34) & "'"

现在,每次点击圆圈时,圆圈都会点击圆圈后面的单元格,有效地允许您绕过圆圈选择。

关于这种方法的一个好处(在我看来)是右键单击圆圈不会触发宏,因此编辑形状仍然相对容易。关于这种方法的一个不太好的事情是单元格选择不会随着形状位置一起移动(即创建形状以选择A1,将形状移动到B1,单击形状,形状将选择{ {1}})。因此,每次对工作表进行结构更改时,您都必须重新创建形状。