根据单元格值绘制形状

时间:2019-02-14 20:49:08

标签: excel vba cell draw shapes

全部

我有一些代码可以根据宏本身中的输入值创建形状。我想要由用户指定的形状类型,宽度和高度的值(当前在纸上的形状位置对我来说已无所谓)。用户将上述宽度和高度的数值输入到单元格中,然后单击一个按钮,该按钮将输出用户想要的形状类型和尺寸。

在我的情况下,将有一个用于“矩形”和“圆形”的下拉框。我不知道如何获取代码以读取这些单词并将其分别转换为“ 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

1 个答案:

答案 0 :(得分:3)

由于注释中已经包含部分答案,因此我将重点介绍形状选择。
看看这个:

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,但这是不好的做法。使用定义的常量-这将使您的代码更易于阅读。