Excel позволяет размещать на листе все виды графических объектов. Один тип графического объекта фактически содержит текст — текстовое поле.

Если у вас довольно много текстовых полей на листе, вам может быть интересно, есть ли способ извлечь текст из каждого текстового поля и разместить его на самом листе.

Для этого нет команды; вместо этого вы должны использовать макрос. Следующий макрос проходит через каждое текстовое поле на листе и выполняет желаемое извлечение:

Sub ExtractText()

Dim shp As Shape     Dim sLoc As String

For Each shp In ActiveSheet.Shapes         With shp             If Left(.Name, 8) = "Text Box" Then                 sLoc = .TopLeftCell.Address                 Do Until Range(sLoc) = ""

sLoc = Range(sLoc).Offset(1, 0).Address                 Loop                 Range(sLoc) =.TextFrame.Characters.Text                 .Delete             End If         End With     Next End Sub

Поскольку Excel хранит все графические фигуры в коллекции Shapes, вы можете пройти по коллекции и определить, с какими фигурами вы хотите работать. В этом случае проверяются первые восемь символов имени фигуры. Только если имя начинается с «Текстовое поле», макрос считает фигуру текстовым полем, из которого можно извлечь текст.

Вместо того, чтобы проверять формулировку «Текстовое поле» в имени, макрос может также проверить, какой тип формы рассматривается. Если вы предпочитаете это делать, просто замените тестовую строку (If Left …​) следующей тестовой строкой:

If shp.Type = msoTextBox Then

Переменная sLoc используется для хранения местоположения текстового поля, которое содержится в свойстве .TopLeftCell. Затем используется цикл Do, чтобы убедиться, что ячейка, на которую указывает адрес, пуста. (Это предотвращает перезапись любого существующего содержимого ячейки.) Если оно не пустое, то адрес «увеличивается» до следующей ячейки в столбце.

После определения адреса пустой ячейки текст текстового поля сохраняется в ячейке. Затем используется метод .Delete, чтобы избавиться от фактического текстового поля.

_Примечание: _

Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.

link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

ExcelTips — ваш источник экономичного обучения Microsoft Excel.

Этот совет (11631) применим к Microsoft Excel 2007, 2010, 2013, 2016, 2019 и Excel в Office 365. Вы можете найти версию этого совета для старого интерфейса меню Excel здесь:

link: / excel-Placing_Textbox_Text_Into_a_Worksheet [Размещение текста текстового поля на листе].