Поиск, подходит ли заголовок TextBox / Label в элементе управления - PullRequest
1 голос
/ 02 ноября 2008

Сценарий пытается отрегулировать размер шрифта, чтобы получить хорошее графическое расположение, или пытается решить, где сломать заголовок / субтитр. а) В XL VBA есть способ узнать, соответствует ли текст в текстовом поле или заголовок надписи элементу управления? б) Есть ли способ узнать, где был разбит текст / заголовок при многострочном управлении?

Ответы [ 2 ]

2 голосов
/ 03 ноября 2008

Я отдохнул, дал достаточно времени (что дает гораздо лучшие результаты, чем "отрыгнуть без ответа как можно скорее, за кредиты") и ...

Function TextWidth(aText As String, Optional aFont As NewFont) As Single
    Dim theFont As New NewFont
    Dim notSeenTBox As Control

    On Error Resume Next 'trap for aFont=Nothing
    theFont = aFont 'try assign

    If Err.Number Then 'can't use aFont because it's not instantiated/set
        theFont.Name = "Tahoma"
        theFont.Size = 8
        theFont.Bold = False
        theFont.Italic = False
    End If
    On Error GoTo ErrHandler

    'make a TextBox, fiddle with autosize et al, retrive control width
    Set notSeenTBox = UserForms(0).Controls.Add("Forms.TextBox.1", "notSeen1", False)
    notSeenTBox.MultiLine = False
    notSeenTBox.AutoSize = True 'the trick
    notSeenTBox.Font.Name = theFont.Name
    notSeenTBox.SpecialEffect = 0
    notSeenTBox.Width = 0 ' otherwise we get an offset (a ""feature"" from MS)
    notSeenTBox.Text = aText
    TextWidth = notSeenTBox.Width
    'done with it, to scrap I say
    UserForms(0).Controls.Remove ("notSeen1")
    Exit Function

ErrHandler:
    TextWidth = -1
    MsgBox "TextWidth failed: " + Err.Description
End Function

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

0 голосов
/ 02 ноября 2008

Я уверен, что нет никакого способа сделать это с обычными элементами управления Excel на панели инструментов «Формы», не в последнюю очередь потому, что (насколько я понимаю) это просто рисунки, а не полные элементы управления Windows.

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

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