У меня есть следующий макрос, который связан с формой (как если бы это была кнопка):

Sub circulo()
    Dim SSLeft As Double
    Dim SSTop As Double
    Dim SSWidth As Double
    Dim SSHeight As Double
    Dim shpOval As Shape
    Dim SS As Range
    Dim SS1 As String
    Set SS = SS1
    Set SS1 = Range("AO24").Text
    SSLeft = SS.Left
    SSTop = SS.Top
    SSHeight = SS.Height
    SSWidth = SS.Width
    Set shp = ActiveSheet.Shapes.AddShape(msoShapeOval, SSLeft, SSTop, 20, 20)
End Sub

Он должен создать фигуру (овал) в ячейке (C8), на которую ссылается другая ячейка (AO24). В ячейке AO24 меня есть следующая формула:

=""""&SUSTITUTE(CELL("ADRESS",INDEX(B7:H7,1,MATCH(AN24,B7:H7,0))),"$","")&""""

Он ищет значение ячейки AN24 (дата) в некотором диапазоне (B7:H7), давая результат C8 . Предполагается, что макрос получит значение из ячейки (AO24) и сделает его диапазоном, поэтому он добавит форму в ячейку, которую дает формула (в данном случае C8), но не бывает, я пытаюсь сделать это таким образом, потому что значение AO24 будет меняться динамически.

Любая помощь по правильному способу сделать это будет оценена.

Изменить: это не орфография, формула была переведена, поэтому изначально она работает.

1 ответ1

0

Проблема с вашим Кодексом,

Dim SS1 As String и Set SS1 = Range("AO24").Text

Фактически переменный тип данных SS1 должен быть Range и Set SS1 = Range("AO24") .

Сейчас вы пытаетесь создать динамический диапазон для создания Shape, но в этом случае Excel VBA считывает только адрес ячейки и создает Shape в ячейке AO24.

Я хотел бы рекомендовать вам использовать Range(Selection.Address) так что вы можете выбрать ячейку, где вы хотите нарисовать форму.

Проверьте приведенный ниже код, который поможет вам создать Shape в Active Cell.

Private Sub CommandButton24_Click()

  Dim clLeft As Double
  Dim clTop As Double
  Dim clWidth As Double
  Dim clHeight As Double

  Dim cl As Range
  Dim shpOval As Shape

      Set cl = Range(Selection.Address)
        'Set cl = Range("AO24")

          clLeft = cl.Left
            clTop = cl.Top
              clHeight = cl.Height
                clWidth = cl.Width

       Set shpOval = ActiveSheet.Shapes.AddShape(msoShapeOval, clLeft, clTop, 40, 10)

Debug.Print shpOval.Left = clLeft
Debug.Print shpOval.Top = clTop

End Sub

Надеюсь, это поможет вам.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .