2009-11-16 5 views
4

사용자 지정 서식 지정으로 텍스트를 삽입 한 다음 글꼴 스타일을 코드를 실행하기 전에 다시 변경하려고합니다.Word 2007 VBA를 사용하여 텍스트 삽입

Dim myText As String 
Dim oldFont As Object 
'Save old font  
Set oldFont = Selection.Font 

'Insert text with custom font 
myText = "CUSTOM STRING" 
Selection.Font.Name = "Comic Sans MS" 
Selection.Font.Size = 26 
Selection.Font.Bold = True 
Selection.TypeText (myText) 

'Revert font back to original 
Set Selection.Font = oldFont 

누구든지 내가 원하는 것을 할 수있는 방법을 설명 할 수 있습니까?

편집 : 더 구체적이어야합니다. 텍스트를 입력 할 때 홈 탭 (예 : 만화 Sans Ms, 크기 22, 굵게)에 표시되는 특정 서식이 있습니다. 코드에 텍스트를 삽입하면 입력하는 형식이 변경되므로 입력을 계속하면 NEWS 글꼴 유형이 아닌 Comic Sans MS 형식이됩니다. VBA 코드를 통해 텍스트를 삽입 한 후에 타이핑을 계속하면 오래된 서식을 유지할 수 있도록 노력하고 있습니다.

답변

4

하나 개의 간단한 솔루션을 변경하려는 모든 속성을 저장하는 것입니다, 그리고에 끝에서 다시 설정하십시오.

Dim myText As String 
Dim oldFont As String 
Dim oldSize As Integer 
Dim oldBold As Boolean 

'Save old font 
oldFont = Selection.Font.Name 
oldSize = Selection.Font.Size 
oldBold = Selection.Font.Bold 

'Insert text with custom font 
myText = "CUSTOM STRING" 
Selection.Font.Name = "Comic Sans MS" 
Selection.Font.Size = 26 
Selection.Font.Bold = True 
Selection.TypeText (myText) 

'Revert font back to original 
Selection.Font.Name = oldFont 
Selection.Font.Bold = oldBold 
Selection.Font.Size = oldSize 
0

정확하게 무엇을 하려는지 정확히 알 수는 없지만 Selection.TypeText은 선택 항목을 삽입 지점까지 축소하므로 실제로 "되돌릴"때까지 선택한 문자가 없습니다. ". 텍스트를 다시 선택하거나 선택 항목 대신 Range 개체를 사용하여 영향을받을 텍스트를 식별해야합니다.

당신이 줄에서 오류가 발생하는 이유는 : - 비정상적으로, 그리고 심술 궂게 -

Set Selection.Font = oldFont 

... 때문이다 Font 속성에 할당 할 때 당신이 Set 키워드를 사용할 수 없습니다. Font 개체에 대한 참조를 저장하는 대신 할당은 할당 된 글꼴의 속성을 적용하기 만합니다. Font 속성을 읽을 때 당신이 Set 키워드를 사용하는 필요성을 때문에

이 매우 혼란 API 디자인, 더욱 혼란하게하고, 그 때문에Font 객체에 대한 참조를 할당 않습니다!

그 이유는 코드가 작동하지 않는 다른 이유입니다. 수정 한 Font 개체에 대한 참조를 취하고 참조가 현재 변경된 동일한 Font 개체를 가리키고 있습니다.

무엇을 다음과 같이 실제로 원래의 글꼴 정보를 저장하는 새로운 Font 객체를 생성하기 만하면됩니다 :

Set oldFont = Selection.Font.Duplicate 
+0

죄송합니다, 좀 더 구체적인되어 있어야합니다. 텍스트를 입력 할 때 홈 탭 (예 : 만화 Sans Ms, 크기 22, 굵게)에 입력 한 특정 서식이 있습니다. 매크로를 사용하여 텍스트를 삽입하면 입력하는 서식이 변경되므로 입력을 계속하면 NEWS 글꼴 유형이 아닌 Comic Sans MS가됩니다. 매크로를 통해 텍스트를 삽입 한 후에도 타이핑을 계속하면 오래된 서식을 유지할 수 있도록 노력하고 있습니다. –

0

Selection.Font 객체는 읽기 전용입니다.

즉, 한 설정에서 모든 설정을 복원 할 수있는 방법이 없습니다. 몇 가지 속성 만 변경하기 때문에 가장 쉬운 해결책은 stephan이 제안한대로 개별 값을 저장하고 복원하는 것입니다.

e.e.속성을 저장 :

oldFontName = Selection.Font.Name 
oldFontSize = Selection.Font.Size 
oldFontBold = Selection.Font.Bold 

당신이 물건을 누른 다음 속성을 복원 수행

Selection.Font.Name = oldFontName 
Selection.Font.Size = oldFontSize 
Selection.Font.Bold = oldFontBold 
0

참조,이 코드 조각을 제공하는 경우 충분한 힌트를.

CopyFormat은 현재 커서에서 왼쪽으로 이동하여 기존 서식을 선택합니다.
PasteFormat는 (복사 된) 원래의 포맷이 발효에 거기에서 문자 &에 적용합니다.

Selection.MoveLeft unit:=wdWord, Count:=1 
Selection.EndKey Extend:=wdExtend 

Selection.CopyFormat 
Selection.MoveRight unit:=wdWord 

'* New text and new formatting 
Selection.Font.Bold = True 
Selection.Font.Italic = True 
Selection.Font.Size = 28 
Selection.TypeText "hello world" 

Selection.TypeText " " 
Selection.MoveLeft unit:=wdCharacter, Count:=1 
Selection.EndKey Extend:=wdExtend 
Selection.PasteFormat 


Selection.TypeText "original formatting here" 
2

Word 매크로를 작성할 때 유용한 트릭은 Word GUI를 사용하는 경우 단순히 수행 할 작업을 복제하는 것입니다. 서식이 지정된 텍스트를 붙여 넣을 때 현재 서식을 그대로 유지하려면 공백을 입력하고 공백 앞에 텍스트를 붙여 넣은 다음 공백을 삭제하십시오. 공간에는 원래 형식이 있으므로 다시 가져 오는 방법입니다.

그래서, 매크로로이 일을 :

'Type a space 
Selection.TypeText Text:=" " 

'Move Cursor back one character 
Selection.MoveLeft Unit:=wdCharacter, Count:=1 

'Insert text with custom font 
myText = "CUSTOM STRING" 
Selection.Font.Name = "Comic Sans MS" 
Selection.Font.Size = 26 
Selection.Font.Bold = True 
Selection.TypeText (myText) 

'Move Cursor forward one character 
Selection.MoveRight Unit:=wdCharacter, Count:=1 

'Delete the space 
Selection.TypeBackspace 

이것은 원래 있던 텍스트의 속성을 유지합니다.

0
Sub No_Format() 
' 
' No_Format Macro 
' 
' 
    Selection.PasteSpecial Link:=False, DataType:=wdPasteText 
End Sub 

이렇게하면 텍스트를 붙여넣고 새 서식을 적용 할 수 있습니다.

관련 문제