2015-11-12 1 views
1

Я относительно новичок в VBA и имею только очень ограниченный опыт программирования в целом, но очень ценю некоторую помощь!Передача текста с форматированием как переменной из файла в файл с помощью vba

Конечной целью является передача (форматирование) текста из текстового поля в PPT как переменной между презентациями. Я считаю важным, чтобы (форматированный) текст передавался как переменная, потому что переменная будет использоваться для генерации тела письма (эта часть кода будет выполнена, но я пытаюсь создать кишки этого переменная здесь). К сожалению, я понятия не имею, как передать переменную в VBA. Я думаю, что я понял, как захватить текст, но простое форматирование (полужирный шрифт, различия в размере текста и т. Д.) Теряется. Помоги пожалуйста? :-)

Dim headlines headlines = ActivePresentation.Slides(1).Shapes(1).TextFrame.TextRange.Text

+2

Проблема, которую я вижу, заключается в том, что переменные не взять в форматированном тексте. Они являются «строками» или необработанным неформатированным текстом. Самый простой способ - использовать команду Copy/Paste, поддерживающую копирование буфера обмена, чтобы сохранить все форматирование. Если вы используете VBA в Outlook, вы можете просто выполнить команду .Paste в сообщении –

+0

(2/2), используя код ActivePresentation.Slides (1) .Shapes (1) .TextFrame.TextRange.Copy –

ответ

1

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

например.

Dim myFormattedText as TextFrame ' or TextFrame2 to access all of the newer properties 
Set myFormattedText = ActivePresentation.Slides(1).Shapes(1).TextFrame ' or TextFrame2 

Таким образом, у вас есть все свойства текста внутри этого объекта.

+0

Хм, хорошо, но как передать его из файла в файл? Также есть способ проверить, правильно ли он записывает текст? –

+0

Чтобы передать такой объект между файлами, вы можете, например, просто скопировать объект из слайда PowerPoint в лист Excel, так же, как вы использовали бы пользовательский интерфейс. Или вы можете ссылаться на него в коде VBE, размещенном в выбранном вами приложении (например, Excel или PowerPoint), и копировать свойства между приложениями. –

+0

Я знаю, что мне нужно будет ссылаться на объект с помощью кода, но, честно говоря, я не знаю, как это сделать, и я не уверен, как распознавать другие биты на SO, которые близки к тому, что я хочу. Не могли бы вы начать меня, даже со ссылкой? Кроме того, какой объект я бы использовал? Является ли TextFrame самим объектом, который может быть передан? –

1

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

Option Explicit 

' Macro to copy the first shape from the first slide of open presentation 1 to the first slide of open presentation 2 
' Requires that 2 presetnations are open and that the first has a shape on slide 1 
' Wriiten by Jamie Garroch of youpresent.co.uk 
Sub PassTextBoxBetweenPresentations() 
    Dim oSrcShp As Shape ' Source Shape in Presentation 1 
    Dim oTgtShp As Shape ' Source Shape in Presentation 2 

    ' Set a reference to a shape in the first presentation, in this case, the first shape on the first slide 
    Set oSrcShp = Presentations(1).Slides(1).Shapes(1) 

    ' Copy the shape (with all of its properties) to the clipboard 
    oSrcShp.Copy 

    ' Paste the shape from the first presentation to the second presentation 
    Presentations(2).Slides(1).Shapes.Paste 

    ' Set a reference to the pasted shape 
    Set oTgtShp = Presentations(2).Slides(1).Shapes(Presentations(2).Slides(1).Shapes.Count) 

    ' Do stuff with your pasted shape object 
    With oTgtShp 
    Dim headlines 
    If .HasTextFrame Then 
     If .TextFrame.HasText Then 
     headlines = .TextFrame.TextRange.Text 
     Debug.Print headlines 
     End If 
    End If 
    End With 

    ' Clean up 
    Set oSrcShp = Nothing: Set oTgtShp = Nothing 
End Sub 
+0

Спасибо, Джейми, это определенно помогает мне понять, о чем вы говорили! На мой взгляд, моя главная проблема в этом вопросе заключается в том, могу ли я даже переносить текст с форматированием из PPT в Outlook? –