【问题标题】:Draw Shape Based on Cell Values根据单元格值绘制形状
【发布时间】:2019-02-14 20:49:08
【问题描述】:

全部,

我的代码可以根据宏本身中的输入值创建形状。我想要用户指定的形状类型、宽度和高度的值(表格上的形状位置现在对我来说无关紧要)。用户将上述宽度和高度的数值输入到单元格中,然后单击一个按钮,该按钮将输出用户想要的形状类型和大小。

在我的例子中,会有一个“矩形”和“圆形”的下拉框。我不知道如何让代码读取这些单词并将其分别转换为“1”和“9”。我可能只是让用户选择 1 或 9 来创建形状。

我还想在形状的中心添加文字。同样,我为此创建了一个代码,但它在宏中。我想让代码引用一个单元格值。我想它会和上面一样。

感谢您的帮助。

Sub AddShape()

Dim s As Shape
Dim ws As Worksheet
Set ws = Sheets("Deck Layout")

'add a shape
Set s = ws.Shapes.AddShape(1, 80, 80, 75, 75)

'make it nearly white
s.Fill.ForeColor.RGB = RGB(245, 245, 255)

'show text within it
s.TextFrame.Characters.Text = "1"
s.TextFrame.Characters.Font.ColorIndex = 2

With s.TextFrame.Characters(0, 0)
s.TextFrame.HorizontalAlignment = xlHAlignCenter
s.TextFrame.VerticalAlignment = xlVAlignCenter
.Font.Color = RGB(0, 0, 0)

End With
End Sub

【问题讨论】:

  • 文本可以使用s.TextFrame.Characters.Text = ws.Range("a1").Value。对于形状类型,可能有一个查找表或类似 If a1=rectangle then b=1 并在 addshape 行中使用 b ?
  • 谢谢你,SJR。这适用于文本。我只需要弄清楚如何使用形状来做到这一点。我假设需要一个 WITH 语句。

标签: excel vba cell draw shapes


【解决方案1】:

由于您已经在 cmets 中获得了部分答案,因此我将专注于形状挑选。
看看这个:

Dim ShapeType As MsoAutoShapeType

Select Case LCase(ws.Range("b1").Value)
    Case "rectangle"
        ShapeType = msoShapeRectangle
    Case "circle"
        ShapeType = msoShapeOval
End Select

Set s = ws.Shapes.AddShape(ShapeType, 80, 80, 75, 75)

它会找到B1中的值,将其转换为小写并测试它的“矩形”和“圆形”并将ShapeType设置为相应的值。
您可以改用 1 和 9,但这是不好的做法。使用已定义的常量 - 这将使您的代码更易于阅读。

【讨论】:

  • 请注意,cmet 是短暂的,可以随时删除 - 请随时将信息 edit 到您的帖子中,以使信息更永久,您的答案更完整。
猜你喜欢
  • 1970-01-01
  • 2022-12-10
  • 1970-01-01
  • 2017-02-17
  • 2019-01-30
  • 1970-01-01
  • 1970-01-01
  • 2011-05-22
  • 2013-12-13
相关资源
最近更新 更多