【问题标题】:Macro Excel: To insert a circle into specific range in cell宏 Excel:将圆圈插入单元格的特定范围
【发布时间】:2017-03-20 14:10:41
【问题描述】:

我有一个直径和中心固定的圆。我现在需要做的是将圆圈插入给定范围。例如,给定 11 个列框和 10 个行框要插入到 Excel 单元格中。输入给定范围后,圆将在选定范围内,其中心固定,但框的高度和宽度会有不同的测量值。我的问题是如何将圆插入具有不同高度和宽度的单元格的任何给定范围(如 11 x 10 或 9 x 12)?

我的代码:

Sub DrawCircleWithCenter()
Dim cellwidth As Single
Dim cellheight As Single
Dim ws As Worksheet
Dim rng As Range
Dim Shp2 As Shape


CellLeft = Selection.Left
CellTop = Selection.Top

ActiveSheet.Shapes.AddShape(msoShapeOval, CellLeft, CellTop, 565 / 2, 565 / 2).Select
Selection.ShapeRange.Fill.Visible = msoFalse
With Selection.ShapeRange.Line
    .Visible = msoTrue
    .ForeColor.RGB = RGB(0, 0, 0)
    .Transparency = 0
End With

i = 182
Set Shp2 = ActiveSheet.Shapes.AddShape(i, CellLeft, CellTop, 20, 20)
Shp2.ShapeStyle = msoShapeStylePreset1
Set rng = ActiveWindow.VisibleRange

Selection.Left = rng.Width / 2 - Selection.Width / 2
Selection.Top = rng.Height / 2 - Selection.Height / 2
Shp2.Left = rng.Width / 2 - Shp2.Width / 2
Shp2.Top = rng.Height / 2 - Shp2.Height / 2


End Sub

【问题讨论】:

  • 你的Selection的范围是多少?
  • 目前,范围的选择是随机的。当我更改单元格的高度和宽度时,圆圈将在不同的范围内。是否可以在我想要的范围内制作圆圈?通过使用列 x 行。

标签: vba excel


【解决方案1】:

如果我对您的理解正确,这可能就是您所追求的:

Sub DrawCircleWithCenter(rng As Range)
  Dim Shp1 As Shape, Shp2 As Shape

  Set Shp1 = ActiveSheet.Shapes.AddShape(msoShapeOval, rng.Left, rng.Top, rng.Width, rng.Height)
  Shp1.Fill.Visible = msoFalse
  With Shp1.Line
    .Visible = msoTrue
    .ForeColor.RGB = RGB(0, 0, 0)
    .Transparency = 0
  End With

  Set Shp2 = ActiveSheet.Shapes.AddShape(182, rng.Left, rng.Top, 20, 20)
  Shp2.ShapeStyle = msoShapeStylePreset1

  Shp1.Left = rng.Left
  Shp1.Top = rng.Top
  Shp2.Left = rng.Left + rng.Width / 2 - Shp2.Width / 2
  Shp2.Top = rng.Top + rng.Height / 2 - Shp2.Height / 2
End Sub

Sub Test()
  Dim rng As Range
  Set rng = Selection
  DrawCircleWithCenter rng
End Sub

您可以修改 Test 子例程以提供您所追求的范围。在上述情况下,我使用用户在当前工作表中突出显示的选择来绘制居中的十字和椭圆。如果你选择一个正方形区域,椭圆会变成一个圆形,如果你选择一个矩形区域,它会被压扁成一个椭圆。如果您在所选范围内有不同的单元格宽度和高度,它也可以工作。

【讨论】:

  • 我似乎无法运行代码。它说:对象变量或未设置块方差。这是什么意思?抱歉,我还是 excel 宏的新手。
  • 它在哪一行给出了这个错误?您必须运行 Test 子例程才能看到它的工作(即转到 View-> Macros 并运行 Test)
  • 有效!我首先运行 DrawCircleWithCenter 子例程,这就是我收到错误的原因。对不起,但我还有一个问题。如果我想制作具有固定高度和宽度(565 / 2、565 / 2)的椭圆形,这可能吗?
  • 是的,这是可能的,但必须更改代码。
  • 我需要更改哪一部分?我尝试将(msoShapeOval, rng.Left, rng.Top, **rng.Width, rng.Height**) 更改为(msoShapeOval, rng.Left, rng.Top, **565/2, 565/2**),它不起作用。椭圆不在突出显示的范围内居中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-31
  • 2022-08-19
  • 1970-01-01
  • 1970-01-01
  • 2016-02-29
  • 1970-01-01
相关资源
最近更新 更多