В Excel вы можете вставить объект фигур TextBox и связать его со значением ячейки, выбрав фигуру, затем выбрав строку формул и щелкнув ячейку, значение которой вы хотите отобразить в текстовом поле.

Когда я записываю макрос, который делает это, я получаю следующее.

Sub RecordedMacro()
'
' RecordedMacro Macro
'

'
    ActiveSheet.ChartObjects("Chart 1").Activate
    ActiveChart.Shapes.AddTextbox(msoTextOrientationHorizontal, 0, 12.3, 101.55, _
        40.5).Select
    Application.CutCopyMode = False
    Selection.Formula = "=Sheet1!R7C5"
    Range("D16").Select
End Sub

Если я просто перезапущу этот макрос вручную, макрос прервется на этапе Selection.Formula с ошибкой Run-time error '1004': Unable to set the Formula property of the TextBox class

Как я могу выполнить эту задачу (присвоить значение ячейки TextBox) программно, что Excel позволяет делать из пользовательского интерфейса?

Для справки, это то, что показывает XML, когда вы вручную связываете TextBox и сохраняете файл. Создать этот xml вручную было бы чудовищно сложно.

<cdr:sp macro="" textlink="Sheet1!$D$7">
      <cdr:nvSpPr>
        <cdr:cNvPr id="7" name="TextBox 6">
          <a:extLst xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main">
            <a:ext uri="{FF2B5EF4-FFF2-40B4-BE49-F238E27FC236}">
              <a16:creationId xmlns:a16="http://schemas.microsoft.com/office/drawing/2014/main" id="{A138082B-AC53-4E42-86F7-A28CF4BF4089}" />
            </a:ext>
          </a:extLst>
        </cdr:cNvPr>
        <cdr:cNvSpPr txBox="1" />
      </cdr:nvSpPr>
      <cdr:spPr>
        <a:xfrm xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main">
          <a:off x="622935" y="1184910" />
          <a:ext cx="2667000" cy="1200150" />
        </a:xfrm>
        <a:prstGeom xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" prst="rect">
          <a:avLst />
        </a:prstGeom>
      </cdr:spPr>
      <cdr:txBody>
        <a:bodyPr xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" vertOverflow="clip" wrap="square" rtlCol="0" />
        <a:lstStyle xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" />
        <a:p xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main">
          <a:fld id="{3CDA77B5-21A6-4C86-91DA-7A407717D285}" type="TxLink">
            <a:rPr lang="en-US" sz="1100" b="0" i="0" u="none" strike="noStrike">
              <a:solidFill>
                <a:srgbClr val="000000" />
              </a:solidFill>
              <a:latin typeface="Droid Sans" />
              <a:ea typeface="Droid Sans" />
              <a:cs typeface="Droid Sans" />
            </a:rPr>
            <a:t>This is much longer text</a:t>
          </a:fld>
          <a:endParaRPr lang="en-US" sz="1100" />
        </a:p>
      </cdr:txBody>
    </cdr:sp>
0
deseosuho 18 Июн 2020 в 20:25

1 ответ

Лучший ответ

Вы можете использовать свойство Formula объекта TextBox для ссылки на ячейку. Кстати, никакой активации и выбора делать не нужно.

With ActiveSheet.ChartObjects("Chart 1").Chart
    .Shapes.AddTextbox msoTextOrientationHorizontal, 0, 12.3, 101.55, 40.5
    .TextBoxes(.TextBoxes.Count).Formula = "=Sheet1!E7"
End With
1
Domenic 19 Июн 2020 в 01:14