Usando o valor da célula como referência de intervalo

0

Estou com a macro a seguir vinculada a uma forma (como se fosse um botão):

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

O que é suposto fazer é criar uma forma (Oval) na célula ( C8 ) que é referenciada de outra célula ( AO24 ). Na célula AO24 , tenho a seguinte fórmula:

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

Ele pesquisa o valor da célula AN24 (uma data) em algum intervalo ( B7:H7 ), fornecendo o resultado C8 . O que é suposto acontecer é que a macro obterá o valor da célula ( AO24 ) e o tornará um intervalo, portanto, ele adicionará a forma à célula que a fórmula está fornecendo ( C8 neste caso), mas isso não acontece, eu tento fazer dessa maneira porque o valor de AO24 mudará dinamicamente.

Qualquer ajuda no caminho certo para fazer isso será apreciada.

Editar: não é ortografia, a fórmula foi traduzida, então originalmente funciona.

    
por user9221392 15.01.2018 / 22:27

1 resposta

0

O problema com o seu código é

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

O tipo de dados SS1 realmente variável deve ser Intervalo e Set SS1 = Range("AO24") .

Agora você está tentando criar um intervalo dinâmico para criar Shape, mas, nesse caso, o Excel VBA somente lê o endereço da célula e fará Shape na célula AO24.

Eu gostaria de recomendar que você use Range(Selection.Address) para que você possa selecionar a célula onde deseja desenhar a forma.

Verifique o código abaixo escrito para ajudá-lo a criar o Shape no 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

Espero que isso ajude você.

    
por 17.02.2018 / 09:45