Тема: Как получить содержание MText без описания стиля?

Выделяю MText, например содержащий "ХХХ", в ВБА присваиваю его TextString переменной, вставляю, допустим, в Эксель, получаю: {\fArial|b0|i0|c204|p34;ХХХ}. Как получить просто содержание?

Re: Как получить содержание MText без описания стиля?

Вопрос получился неверным, звучать должен так: "Как получить содержание MText без описания формата?"

Re: Как получить содержание MText без описания стиля?

Сносить форматирование. удалять символы начиная с {\f и до первого вхождения ";"

Re: Как получить содержание MText без описания стиля?

Жаль, что по-другому - никак..((
Спасибо.

Re: Как получить содержание MText без описания стиля?

https://www.caduser.ru/forum/topic20992.html

Re: Как получить содержание MText без описания стиля?

> Gogi
Там на лиспе, а требуется в VBA. Хотя, с другой стороны, не особо проблема-то: получить строку, снести форматирование и поставить на место. Сносить, судя по всему, надо символы "{" ";" "}" "|хх|" (между "{" и ";" удалять все; удалить последний "}"; удалить все последовательности "|xx|", где xx - одно из c0 c1 i0 i1 и т.п.

Re: Как получить содержание MText без описания стиля?

kpblc, я пока начинаю разбираться в VBA.. Чего-то не могу найти операторы или функции работы с текстовыми строками.. Наведи, плз на мысль. С какой стороны подходить-то?

Re: Как получить содержание MText без описания стиля?

Дык я там вообще нуль :) Уже. В лисп свалился :) Посмотри объект MTEXT, свойство TextString.

Re: Как получить содержание MText без описания стиля?

Странно.. То, что в екселе можно запросто сделать формулами, не поддается бейсику. Оставил учебник по лиспу на десерт, но видимо придется теперь туда податься.

Re: Как получить содержание MText без описания стиля?

в редакторе VBA в Object Browser'е (вызыватся F2) в списке Classes есть класс Strings. этот класс содержит фукции для работы с текстом

Re: Как получить содержание MText без описания стиля?

Ай, каюсь!.. Напраслину возвел я на детище Майкрософт.)) Сколько тут всего!..
В хэлпе это ни под каким запросом не отображалось.
Егор Опарин, спасибо за дельный совет.

Re: Как получить содержание MText без описания стиля?

Dim obj1 As AcadObject
Dim pnt1 As Variant
ThisDrawing.Utility.GetEntity obj1, pnt1,
If obj1.objectName <> "AcDbMText" Then
    Dim objectName As String
    objectName = obj1.objectName
    Dim objectNameLength As Byte
    objectNameLength = Len(objectName)
    Dim RealObjectName As String
    RealObjectName = Mid(objectName, 5, (objectNameLength - 4))
    MsgBox "Ну ты тормоз!!!  smile" & vbCrLf & "я же сказал MTEXT выбрать," _
    vbCrLf & "а ты выбрал: " & RealObjectName, vbCritical, "ERROR"
Else
    Dim mtxt As AcadMText
    Set mtxt = obj1
    Dim Txt As String
    Txt = mtxt.TextString
    Dim TxtLength As Byte
    TxtLength = Len(Txt)
    MsgBox "Текст : " & Txt & vbCrLf & "Длина: " & TxtLength
End If
если выбрать строку мтекста "ХХХ" колво символов будет - 3, что свидетельствует об отсутствии всяких лишних символов,

Re: Как получить содержание MText без описания стиля?

> Егор Опарин
[rus] Ne poluchitsja.
Esli v tekste menjajutsja shrifty ili vysota teksta, poluchish labudu. [/rus]

Re: Как получить содержание MText без описания стиля?

Лучше уж хирургическим способом вырезать все лишнее:

NewMText = Right(OldMText, Len(OldMText) - InStr(";", OldMText))
NewMText = Replace(NewMText, "}", "")

Этим вроде решил свою проблему.. не тестировал, но думаю подойдет для всех форматов

Re: Как получить содержание MText без описания стиля?

Упс, не подумавши написал..
Для сложного текста это оказывается намного труднее.. А ну его, этот MText! Легче его Explode :)...

Re: Как получить содержание MText без описания стиля?

Ну попробуй такое(заранее говорю что для 2006 надо бы кое чего добавить, долго не проверял):

Public Function RemoveFrmStr(str As String) As String
    Dim i, imax, i1 As Long
    Dim tempStr  As String
    Dim singlC As String * 1
    tempStr = Replace(str, "\o", "  ", , , vbTextCompare)
    RSet tempStr = Replace(str, "\l", "  ", , , vbTextCompare)
    RSet tempStr = Replace(str, "\P", "  ", , , vbBinaryCompare)
    imax = Len(tempStr)
    i = 1
    i = InStr(i, tempStr, "\")
    Do While i > 0 And i < imax
        If Mid(tempStr, i + 1, 1) = "\" Then
           Mid(tempStr, i, 2) = " \"
           i = i + 2
        ElseIf Mid(tempStr, i + 1, 1) Like "[CcFfHTQWp]" Then
            i1 = InStr(i, str, ";")
            If i1 > 0 Then
                Mid(tempStr, i, i1 - i + 1) = Space(i1 - i + 1)
                i = i1 + 1
            Else
                Mid(tempStr, i, imax - i + 1) = Space(imax - i + 1)
                Exit Do
            End If
        End If
        i = InStr(i, tempStr, "\")
    Loop
    If Left(tempStr, 1) = "{" Then Mid(tempStr, 1) = " "
    i = 2
    i = InStr(i, tempStr, "{")
    Do While i > 0 And i < imax
        If Mid(tempStr, i - 1, 1) = "\" Then
            Mid(tempStr, i - 1, 2) = " {"
        Else
            Mid(tempStr, i, 1) = " "
        End If
        i = i + 1
        i = InStr(i, tempStr, "{")
    Loop
    i = 1
    i = InStr(i, tempStr, "}")
    Do While i > 0 And i <= imax
        If Mid(tempStr, i - 1, 1) = "\" Then
            Mid(tempStr, i - 1, 2) = " }"
        Else
            Mid(tempStr, i, 1) = " "
        End If
        i = i + 1
        i = InStr(i, tempStr, "}")
    Loop
    RemoveFrmStr = tempStr
 End Function