2015-04-01 2 views
0

У меня есть несколько вопросов о фигурах в VBA Excel.Форма размещения и счетчик формы

У меня есть столбец A и столбец B. Они будут показаны вот так.

A   B 
1 | some text 1 to 5 shapes 
2 | blabla  OOOO 

Я хочу ввести текст и фигуры через форму пользователя. Поэтому, если пользователь выбирает «1», я хочу, чтобы одна фигура отображалась слева от ячейки в столбце B. Если пользователь выбирает «3», я хочу, чтобы в столбце B появлялись рядом друг с другом фигуры.

Кроме того, если кто-то сначала выбирает 3 формы и хочет изменить его на 4 фигуры позже, я должен поставить четвертую фигуру в нужное место.

Все это должно работать, если я изменяю ширину столбцов.

Я действительно много искал, но я не могу найти правильное решение.

+0

Какая ячейка в столбце ** A ** должен использоваться, чтобы определить местонахождение * Формы ?? * –

+0

Я ищу что-то вроде 'Coords = shape1.position' или что-то. Формы не должны находиться из столбца A. Что-то вроде 'range (" b1 "). CountShapes' и что-то вроде' shape1.position = coords' – Grafit

+0

Не понимаю. –

ответ

2

Этот бит работает для меня, но, конечно, вам придется модифицировать, чтобы использовать свои собственные формы и цели.

Sub DrawShapesInPlace(shapeCell As Range, numShapes As Integer, Optional gap As Double = 3#) 
    Dim cellW As Double 
    Dim cellH As Double 
    Dim shapeW As Double 
    Dim shapeUL As Double 
    Dim shapeTop As Double 
    Dim shapeH As Double 
    Dim i As Integer 
    Dim newShape As Shape 

    If numShapes < 1 Then 
     Exit Sub 
    End If 

    cellW = shapeCell.Width 
    cellH = shapeCell.Height 
    shapeW = (cellW/numShapes) - gap 
    shapeUL = shapeCell.Left 
    shapeTop = shapeCell.Top 
    shapeH = cellH 

    For i = 1 To numShapes 
     Set newShape = ActiveSheet.Shapes.AddShape(msoShapeRectangle, _ 
                shapeUL, _ 
                shapeTop, _ 
                shapeW, _ 
                shapeH) 
     newShape.Line.Weight = 1 
     shapeUL = shapeUL + gap + shapeW 
    Next i 
End Sub 

Sub DrawShapes() 
    Call DrawShapesInPlace(ActiveSheet.Range("D9"), 3) 
End Sub 
+0

Отлично работает и очень понятно, спасибо! – Grafit

Смежные вопросы