Печать строки курсивом

#vba #excel #ms-word

#vba #excel #ms-word

Вопрос:

Я принимаю входные данные в виде строк из a Userform , и мне нужно вывести их в ячейку. На выходе все строки объединяются, но только некоторые из них выделены курсивом. Я не могу вывести строки, выделенные курсивом. Я пробовал искать документацию, stack exchange и несколько других блогов, но все они требуют выделения из ячейки, а не манипулирования строкой, полученной из Userform . Любая помощь или указания приветствуются.

Выводим сейчас: [1] R. Welder. Как сварить. Сварочный цех: Издательство, 2014, стр. 25-32.

Желаемый результат:[1] R. Welder. Как сварить. Сварочный цех: Издательство, 2014, стр. 25-32.

 Private Sub Ok_Click()
Dim emptyRow As Long
Dim bookAuthor, bookTitle, loc, publish, yearBook, pageBook As String

'Make Sheet2 active
 Sheet2.Activate

'Determine emptyRow
emptyRow = WorksheetFunction.CountA(Range("A:A"))   1

'Format Information
bookAuthor = Author.Value   ". "
bookTitle = TitleOfBook.Value   ". " 'Needs to be Italicized
'bookTitle.Font.Italic 'Error: Object Required
'TitleOfBook.Font.Italic = True 'Italicizes in userform but not in cell
loc = Location.Value   ": "
publish = Publisher.Value   ", "
yearBook = Year.Value   ", "
pageBook = "pp. "   Pages.Value   ". "

'Transfer information
Cells(emptyRow, 1).Value = "["   CStr(emptyRow)   "] "   bookAuthor   bookTitle   loc   publish   yearBook   pageBook

Unload Me
End Sub'
  

Комментарии:

1. Пожалуйста, опубликуйте свой код…

2. «Я получаю сообщение об ошибке» не является полезным описанием проблемы. Вы знаете, что это за ошибка, потому что она прямо перед вами. Нет абсолютно никаких причин не включать ее в свой вопрос. Для какого кода вы используете Font.Italic и какую конкретную ошибку вы получаете? Мы не можем отладить для вас код, который вы не включили в свой вопрос.

3. Просто замечание относительно вашего кода: строка Dim bookAuthor, bookTitle, loc, publish, yearBook, pageBook As String будет объявляться только pageBook как string, все остальные переменные будут Variant .

4. Всегда последнее слово? Какое правило определяет, какие слова вы хотите выделить курсивом?

5. Спасибо MP24! Я не знал об этом.

Ответ №1:

Установите стиль шрифта ячейки, в которую вы вводите, так, чтобы в ячейке был курсив, а не строка;

 With Range("A1")
    .Font.Italic = True
    .Value = "Roast Beef"
End With
  

Редактировать; Чтобы выделить часть ячейки курсивом, выделите ее содержимое по смещению и длине:

 emptyRow = 1
bookAuthor = "R. Welder."
bookTitle = "How to weld"
loc = "Welding Shop"
publish = "Publisher"
yearBook = "2014"
pageBook = "pp25-32"

Dim temp As String, begin As Long
'// store everything upto the start of italic part
temp = "[" amp; emptyRow amp; "] " amp; bookAuthor amp; " "
'// store its length
begin = Len(temp)

With Range("A1")
    '// set the value to everything
    .Value = temp amp; bookTitle amp; " " amp; loc amp; " " amp; publish amp; " " amp; yearBook amp; " " amp; pageBook
    '// we know where the italic text need to be
    .Characters(begin   1, Len(bookTitle)).Font.Italic = True
End With
  

Комментарии:

1. Привет, Алекс, мне нужно выделить курсивом только часть букв в ячейке. Скажите только «Говядина» из «Ростбиф».

2. Алекс, есть ли общий способ сделать это? Скажем, две строки «Roast» и «Beef» могут меняться в зависимости от ввода пользователя. Допустим, пользователь вместо этого ввел «Необжаренный» и «Ветчина». Как я мог всегда выделять вторую строку («Ветчина», «Говядина») курсивом? Я мог бы использовать счетчики для подсчета длины строки и использовать метод, который вы показали выше, но просто интересно, может ли быть лучший метод.

3. Я пытаюсь вывести конкатенацию из 6 строк, выделив курсивом только вторую. Длина каждой строки может варьироваться в зависимости от пользовательского ввода.