У Роба есть текстовое поле на листе, содержащее текст, скопированный из Word.

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

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

Sub ResizeBox1()

Dim sTL As String     Dim sBR As String     Dim rng As Range

' Change top-left and bottom-right addresses as desired     sTL = "A1"

sBR = "M40"



' Ensure a text box is selected     If TypeName(Selection) <> "TextBox" Then         MsgBox "Text box not selected"

Exit Sub     End If

With Selection         Set rng = ActiveSheet.Range(sTL)

.Top = rng.Top         .Left = rng.Left         Set rng = ActiveSheet.Range(sBR)

.Width = rng.Left + rng.Width         .Height = rng.Top + rng.Height     End With     Set rng = Nothing End Sub

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

При желании вы можете использовать именованный диапазон, чтобы указать диапазон, который будет охватывать текстовое поле. В следующем макросе предполагается, что диапазон будет называться RangeToCover. Когда вы выбираете текстовое поле и запускаете макрос, размер текстового поля изменяется в соответствии с размером диапазона.

Sub ResizeBox2()

Dim l_rRangeToCover As Range     Dim l_rLowerRight As Range

' Ensure a text box is selected     If TypeName(Selection) <> "TextBox" Then         MsgBox "Text box not selected"

Exit Sub     End If

' Get the range to cover     Set l_rRangeToCover = _       ActiveSheet.Range(Names("RangeToCover").RefersToRange.Value)



' Get its lower right cell     Set l_rLowerRight = _       l_rRangeToCover.Cells( _       l_rRangeToCover.Rows.Count, _       l_rRangeToCover.Columns.Count)



' Resize the text box     With Selection         .Left = l_rRangeToCover.Left         .Top = l_rRangeToCover.Top         .Width = l_rLowerRight.Left + l_rLowerRight.Width - .Left         .Height = l_rLowerRight.Top + l_rLowerRight.Height - .Top     End With End Sub

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

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

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

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

Этот совет (3143) применим к Microsoft Excel 97, 2000, 2002 и 2003. Вы можете найти версию этого совета для ленточного интерфейса Excel (Excel 2007 и новее) здесь:

link: / excelribbon-Resizing_a_Text_Box_in_a_Macro [Изменение размера текстового поля в макросе].