0

当用户从下拉列表中选择是或否时,我想移动一个形状。我认为这很简单,即使用 VBA 剪切和粘贴形状,但它似乎不是那样工作的。

下图作为视觉表示:

在此处输入图像描述

目标是在选择“是”时将形状带入视野(单元格 CC18),而在选择“否”时将形状移到视野之外(理想情况下在另一张纸上,但也可以移动到同一张纸上)。

我运行Macro Recorder并得到以下代码:

Sub Macro1()
'
' Macro1 Macro
'

'
    ActiveSheet.Shapes.Range(Array("shpAPEX")).Select
    Selection.Cut
    Range("CH18").Select
    ActiveSheet.Paste
End Sub

显然这并不理想,所以我试图将其翻译成更干净的东西,即:

ws.Shapes("shpAPEX").Cut
ws.Range("CC18").Paste

但这不起作用。它会剪切形状,但不会粘贴它。我可以通过在剪贴板中找到形状来看到这一点。

但是,以下代码有效:

ws.Shapes("shpAPEX").Cut
ws.Range("CC18").Select
ActiveSheet.Paste

谁能向我解释为什么我最初的尝试不起作用,以及在工作表之间移动形状的最佳方法是什么?

4

1 回答 1

1

最简单的方法是更改​​形状的visible属性:

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address(0, 0) = "A1" Then
    ActiveSheet.Shapes("Rectangle 1").Visible = (Target.Value = "Yes")
End If

End Sub

但是,如果这不理想或有问题,您可以将形状保留在另一张纸上,然后将其复制到 sheet1 或删除。如果您在工作表上有其他形状,则可能需要进行一些调整,并且在尝试删除时没有形状时会出现错误捕获:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim s As Shape

Set s = Sheet2.Shapes("Rectangle 1") 'shape on another sheet

If Target.Address(0, 0) = "A1" Then
    If Target.Value = "Yes" Then
        s.Copy
        ActiveSheet.Paste 'then use top/left etc to position
    Else
        ActiveSheet.Shapes(1).Delete
    End If
End If

End Sub
于 2020-04-07T08:26:30.997 回答