Программно установить текстовое поле, связанное со значением ячейки - PullRequest
0 голосов
/ 18 июня 2020

В 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

Как я могу выполнить sh эту задачу (присвоить значение ячейки 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>

1 Ответ

1 голос
/ 19 июня 2020

Вы можете использовать свойство 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...