vba - 在 VBA 中在单元格之间移动图像

标签 vba excel

我在单元格 (3,1) 中有一个图像,并且希望将图像移动到单元格 (1,1) 中。

我有这个代码:

ActiveSheet.Cells(1, 1).Value = ActiveSheet.Cells(3, 1).Value
ActiveSheet.Cells(3, 1).Value = ""

但是,对于包含图像的单元格,单元格值为空,因此图像不会移动,单元格 (3,1) 中的图像也不会被删除。当我运行该特定代码段时,没有任何反应。

非常感谢任何帮助。

谢谢。

最佳答案

代码的部分问题在于您将图像视为单元格的。但是,虽然图像可能看起来位于单元格“内部”,但它实际上并不是单元格的值。

要移动图像,您可以相对(使用Shape.IncrementLeftShape.IncrementRight),或者您也可以< em>绝对(通过设置 Shape.LeftShape.Top 的值)。

在下面的示例中,我演示了如何将形状移动到新的绝对位置,无论是否保留原始单元格的原始缩进(如果不保留原始缩进,这就像设置ShapeTopLeft 值等于目标 Range 的值。

此过程接受形状名称(您可以通过多种方式找到形状名称;我的方法是录制宏,然后单击形状并移动它以查看它生成的代码),目标地址(例如“A1”,以及(可选)一个 bool 值,指示是否要保留原始缩进偏移量。

Sub ShapeMove(strShapeName As String, _
    strTargetAddress As String, _
    Optional blnIndent As Boolean = True)
Dim ws As Worksheet
Dim shp As Shape
Dim dblCurrentPosLeft As Double
Dim dblCurrentPosTop As Double
Dim rngCurrentCell As Range
Dim dblCurrentCellTop As Double
Dim dblCurrentCellLeft As Double
Dim dblIndentLeft As Double
Dim dblIndentTop As Double
Dim rngTargetCell As Range
Dim dblTargetCellTop As Double
Dim dblTargetCellLeft As Double
Dim dblNewPosTop As Double
Dim dblNewPosLeft As Double

'Set ws to be the ActiveSheet, though this can really be any sheet      '
Set ws = ActiveSheet

'Set the shp variable as the shape with the specified shape name  '
Set shp = ws.Shapes(strShapeName)

'Get the current position of the image on the worksheet                 '
dblCurrentPosLeft = shp.Left
dblCurrentPosTop = shp.Top

'Get the current cell range of the image                                '
Set rngCurrentCell = ws.Range(shp.TopLeftCell.Address)

'Get the absolute position of the current cell                          '
dblCurrentCellLeft = rngCurrentCell.Left
dblCurrentCellTop = rngCurrentCell.Top

'Establish the current offset of the image in relation to the top left cell'
dblIndentLeft = dblCurrentPosLeft - dblCurrentCellLeft
dblIndentTop = dblCurrentPosTop - dblCurrentCellTop

'Set the rngTargetCell object to be the address specified in the paramater '
Set rngTargetCell = ws.Range(strTargetAddress)

'Get the absolute position of the target cell       '
dblTargetCellLeft = rngTargetCell.Left
dblTargetCellTop = rngTargetCell.Top

'Establish the coordinates of the new position. Only indent if the boolean '
' parameter passed in is true. '
' NB: The indent can get off if your indentation is greater than the length '
' or width of the cell '
If blnIndent Then
    dblNewPosLeft = dblTargetCellLeft + dblIndentLeft
    dblNewPosTop = dblTargetCellTop + dblIndentTop
Else
    dblNewPosLeft = dblTargetCellLeft
    dblNewPosTop = dblTargetCellTop
End If

'Move the shape to its new position '
shp.Top = dblNewPosTop
shp.Left = dblNewPosLeft

End Sub

注意:我以非常实用的方式编写了代码。如果您想“清理”此代码,最好将功能放在对象中。希望它可以帮助读者了解形状在 Excel 中的工作原理。

关于vba - 在 VBA 中在单元格之间移动图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1905060/

相关文章:

excel - 寻找一种使用可变范围自动填充的方法

vba - 创建新工作表,然后返回到上一个事件工作表

excel - 使用Find方法格式化某个范围内的某些字符串

excel - 使用 Inbox.Items.Restrict 在 Outlook 筛选器中查询未读邮件的 DSAL

java - 使用 Excel 文件中的数据刷新表 JTable

vba - 意外的字符串结果

vba - Excel VBA For 循环不起作用,不断出现错误消息

vba - for 循环中的 if 语句

excel - Vba 宏在家用电脑上运行,在工作电脑上出现错误 2147417848

c# - 在 C# 中使用 EPPLUS 设置列数据格式