Hücre değerini aralık referansı olarak kullanma


0

Bir şekle bağlı aşağıdaki makroya sahibim (sanki bir düğmeymiş gibi):

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

Yapması gereken, hücrede ( C8) başka bir hücreden ( AO24) başvurulan bir şekil (Oval) oluşturmaktır . Hücrede AO24aşağıdaki formül var:

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

Bir AN24aralıktaki hücrenin değerini (bir tarih) araştırır B7:H7ve sonucu verir C8. Olması gereken, makronun hücreden ( AO24) değeri alacağı ve onu bir aralık haline getireceğidir, böylece formülün verdiği hücreye şekil katar ( C8bu durumda), ancak bu gerçekleşmez. Bunu bu şekilde yapmaya çalışıyorum çünkü değeri AO24dinamik olarak değişecek.

Bunu yapmak için doğru yolda herhangi bir yardım takdir edilecektir.

Düzenleme: yazım denetimi yapılmadı, formül çevrildi, yani işe yarıyor.


belki yazım düzeltmek yardımcı olur? SUSTITUTE=>SUBSTITUTE
Aganju

Yanıtlar:


0

Kodunuzla ilgili sorun,

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

Aslında Değişken SS1 veri türü Range ve olmalıdır Set SS1 = Range("AO24").

Şimdi Şekil oluşturmak için Dinamik Aralık oluşturmaya çalışıyorsunuz, ancak bu durumda Excel VBA yalnızca Hücre Adresini okuyor ve Hücre AO24'te Şekil yapacak.

Range(Selection.Address)Şekil'i belirlemek istediğiniz Hücreyi seçebilmeniz için kullanmanızı tavsiye ederim .

Aktif Hücre'de Şekil oluşturmanıza yardımcı olacak aşağıdaki yazılı kodu kontrol edin.

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

Umarım bu size yardımcı olur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.