2016-06-09 3 views
0

Я пытаюсь изменить надстройку для excel, которая берет данные из каждой ячейки рабочего листа и помещает их в текстовые поля, где информация может быть легко прочитана и изменена.Как сделать управление текстовым полем изменено в VBA

Поскольку некоторые ячейки содержат большое количество текста (а текстовые поля по умолчанию достаточно большие для одной строки), я пытаюсь настроить текстовые поля так, чтобы пользователь мог видеть весь текст в клетка.

ссылки ниже картинка, так что вы точно знаете, что я имею в виду:

http://www.jibberjobber.com/blog/wp-content/chrome_resize_text_boxes.png

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

Заранее благодарю вас за ответы!

+0

У вас не может быть этого без привязки краев текстового поля и изменения размера * формы *, в которую вы помещаете поле. Элементы управления VBA не являются элементами управления веб-интерфейса. –

+0

Форма изменчива. Вы имеете в виду, что я могу изменять размер текстовых полей, изменяя размеры всей формы? –

+1

Да. Ну, по-прежнему, насколько я знаю, пользователь может перетаскивать мышью. У вас может быть небольшая кнопка +/- где-то, чтобы программно увеличить/уменьшить высоту текстового поля, но это быстро и неизбежно превратилось бы в макет кошмара IMO. –

ответ

1

Другой подход. Измените время выполнения настроек текстового поля. В этом случае

Private Sub TextBox2_Enter() 
    showTextbox2Text 
End Sub 

Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean) 
    returnOriginalTextbox2Text 
End Sub 

Sub showTextbox2Text() 
    TextBox3.Visible = False 
    TextBox2.MultiLine = True 
    TextBox2.Height = 75 'make some calculation to adapt to your with and text in textbox 
End Sub 

Sub returnOriginalTextbox2Text() 
    TextBox3.Visible = Visible 'original setting 
    TextBox2.MultiLine = False 'original setting 
    TextBox2.Height = 25 'original setting 
End Sub 

Перед ввести TextBox2 Before enter TextBox2

После ввода TextBox2 ... в выходе будет возвращаться к исходному Enter TextBox2

0

Вы хотите, чтобы пользователь мог лучше видеть и редактировать информацию? Вы можете сделать трюк ..., который теперь открывает новую форму с информацией в исходном текстовом поле в большем текстовом поле. Эта форма может быть общей для использования во всем текстовом поле и может быть вызвана кнопкой.

OriginalForm EditForm

+0

Интересная идея. Но как я могу сделать это текстовое поле подходящим для текста, который я использую? –

0

после вашего оригинального вопроса, а именно:

"... I предпочли бы, чтобы позволить пользователю выбрать размер, который наилучшим образом соответствует количество текста, размер и шрифт "

вы можете поместить следующий код в UserForm код панели:

Option Explicit 

Private mouseLeft As Single, mouseTop As Single 

Private Sub TextBox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) '<~~ change "TextBox1" to whatever the actual name of your textbox 
    If Button = 1 Then 
     mouseLeft = X 
     mouseTop = Y 
    End If 
End Sub 

Private Sub TextBox1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) '<~~ change "TextBox1" to whatever the actual name of your textbox 
    If Button = 1 Then 
     With Me.TextBox1 '<~~ change "TextBox1" to whatever the actual name of your textbox 
      .Width = .Width + X - mouseLeft 
      .Height = .Height + Y - mouseTop 
     End With 
     mouseLeft = X 
     mouseTop = Y 
    End If 
End Sub 

и пользователем может перетаскивать границы текстового поля в нужные размеры.