excel 我如何使形状图像从角落出来?

fnvucqvd  于 2023-05-01  发布在  其他
关注(0)|答案(1)|浏览(97)

代码读取右侧的地址,以便在每次更改每个单元格的地址时显示形状图像。
但是,由于位置不佳,图像被切断。
如何修复Excel右上角形状的图像?
另外,当代码移动到下一个单元格时,旧图像保持不变。
当我移动到另一个单元格时,如何擦除现有图像?

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    If Target.Column = Range("C:C").Column Then
    
        ActiveSheet.Shapes.AddPicture _
          Filename:=ActiveCell.Offset(0, 7).Value, _
          LinkToFile:=msoFalse, _
          SaveWithDocument:=msoTrue, _
          Left:=ActiveCell.Offset(0, 5).Left, _
          Top:=ActiveCell.Top, _
          Width:=400, Height:=400
        
        Exit Sub
        
    End If
    
End Sub
vmdwslir

vmdwslir1#

以下内容不涉及图像的位置,但允许您在添加新图像之前删除前一个图像。
您可以使用全局变量来存储对旧图像的引用(而不是额外的工作表),但如果VBA丢失了引用或您保存/重新加载Excel,则引用将丢失,因此您需要更多代码来在保存之前删除图像,并检查丢失的图像等。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
Dim Sheet As Worksheet
Dim Image As Shape

Set Sheet = ThisWorkbook.Worksheets("hidden")

Set Image = ActiveSheet.Shapes(Sheet.Cells(1, 1).Value)

If Target.Column = Range("C:C").Column Then

    If Not Image Is Nothing Then Image.Delete

    Set Image = ActiveSheet.Shapes.AddPicture( _
        Filename:=ActiveCell.Offset(0, 7).Value, _
        LinkToFile:=msoFalse, _
        SaveWithDocument:=msoTrue, _
        Left:=ActiveCell.Offset(0, 5).Left, _
        Top:=ActiveCell.Top, _
        Width:=400, Height:=400)
    
    Sheet.Cells(1, 1).Value = Image.Name

    Exit Sub

End If

End Sub

如果您的工作表没有任何其他图像/形状,您也可以执行以下操作

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Image As Shape

If Target.Column = Range("C:C").Column Then

    ' delete all shapes
    For Each Image In ActiveSheet.Shapes
        Image.Delete
    Next

    Set Image = ActiveSheet.Shapes.AddPicture( _
        Filename:=ActiveCell.Offset(0, 7).Value, _
        LinkToFile:=msoFalse, _
        SaveWithDocument:=msoTrue, _
        Left:=ActiveCell.Offset(0, 5).Left, _
        Top:=ActiveCell.Top, _
        Width:=400, Height:=400)

    Exit Sub

End If

End Sub

相关问题