Vba 宏Excel:将圆插入单元格中的特定范围

Vba 宏Excel:将圆插入单元格中的特定范围,vba,excel,Vba,Excel,我有一个固定直径和圆心的圆。我现在需要做的是将圆插入给定的范围。例如,给定要插入excel单元格的11框列和10框行。进入给定范围后,圆将位于选定范围内,其中心固定,但框的高度和宽度测量值不同。我的问题是如何将圆插入任意给定范围(如11x10或9x12),并具有不同的单元格高度和宽度 我的代码: Sub DrawCircleWithCenter() Dim cellwidth As Single Dim cellheight As Single Dim ws As Worksheet Dim r

我有一个固定直径和圆心的圆。我现在需要做的是将圆插入给定的范围。例如,给定要插入excel单元格的11框列和10框行。进入给定范围后,圆将位于选定范围内,其中心固定,但框的高度和宽度测量值不同。我的问题是如何将圆插入任意给定范围(如11x10或9x12),并具有不同的单元格高度和宽度

我的代码:

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

如果我理解正确,这可能就是你想要的:

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

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

您的
选择范围是什么
?目前,范围的选择是随机的。当我改变单元格的高度和宽度时,圆圈将在不同的范围内。可以在我想要的范围内画圆吗?通过使用列x行。我似乎无法运行代码。它表示:对象变量或未设置块方差。这是什么意思?对不起,我对excel宏还是新手。它在哪一行给了您那个错误?您必须运行测试子例程才能看到它工作(即转到查看->宏并运行测试)它工作!我首先运行DrawCircleWithCenter子例程,这就是我出错的原因。对不起,我还有一个问题。如果我想制作一个有固定高度和宽度(565/2565/2)的椭圆形,这可能吗?是的,这是可能的,但代码必须更改。我需要更改哪个部分?我尝试将
(msoShapeOval,rng.Left,rng.Top,**rng.Width,rng.Height**)
更改为
(msoShapeOval,rng.Left,rng.Top,**565/2565/2**)
,但不起作用。椭圆未在高亮显示的范围内居中。