2017-03-26 1 views
1

도형 개체가 있고 어떤 식 으로든 두 문자열 사이의 텍스트를 삭제하고 싶습니다. 는 예컨대 :두 개의 문자열 사이에 텍스트를 삭제합니다. 개체 vba 단어

Dim oRang As RangeSet oRang = ActiveDocument.Shapes(1).TextFrame.TextRange 
Const firstWord = "father" 
const secondWord = "mother" 

내가 오랑우탄에 텍스트가 "아버지 ajgfhdgh aghdashdgsgh sdfyghudsdghkshgfy dgvssdfhyv gdfysdfv gfdsdfv 어머니".

아버지와 어머니 사이의 모든 단어를 삭제하고 싶습니다. 어떻게 할 수 있습니까?

감사합니다,

+0

instr()을 사용하여 두 키워드의 위치를 ​​찾은 다음 왼쪽(), 오른쪽() 및/또는 중간() 조합을 사용하여 문자열을 조각으로 나눌 수 있습니다. 그런 다음 연결 연산자 (&)를 사용하여 중간 부분을 제외한 모든 것을 다시 묶습니다. 해당 기능에 대한 VBA 설명서를 참조하십시오. –

답변

0

이 질문은 문자열 조작에 관한 것입니다 내가 str라는 변수와 결과에있을 입력 문자열을 가정한다 편의를 위해 모양과 아무 상관이 없기 때문에 콘솔에 출력 할 수 있습니다. 필요한 경우 조정하십시오.

기본적으로 두 가지 접근 방식이 있습니다. 첫 번째는 문자열의 일부를 검색 문자열과 LeftMid에서 검색 할 내장 함수InStr을 사용

Dim firstWordLocation As Long 
Dim secondWordLocation As Long 

firstWordLocation = InStr(str, firstWord) 
secondWordLocation = InStr(str, secondWord) 
If firstWordLocation > 0 And secondWordLocation > 0 Then 
    Debug.Print Left(str, firstWordLocation + Len(firstWord) - 1) & Mid(str, secondWordLocation) 
End If 

정규 표현식을 사용하는 것입니다 접근하는 또 다른 방법. 그것들은 훨씬 더 강력하고 매우 컴팩트 한 방법으로 복잡한 문자열 조작을 수행 할 수 있습니다. 라이브러리 마이크로 소프트 VBScript 정규 표현식 5.5 다음과 같이, (또한 자세한 내용은 https://stackoverflow.com/a/22542835 참조) 사용할 수있는 RegExp 클래스 제공이 제 1 및 제 2의 내용 입력 문자열을 대체

Dim regex As New VBScript_RegExp_55.RegExp 

regex.Pattern = "(.*?" & firstWord & ").*?(" & secondWord & ".*)" 
Debug.Print regex.Replace(str, "$1$2") 

을 괄호는 Pattern에 있고, 그 사이의 모든 것을 생략합니다. 예약 된 문자 .*+?()[]{}^$\firstWord 또는 secondWord에서 발생해야하는 경우 백 슬래시 \으로 이스케이프해야합니다. 입력 문자열에 줄 바꿈이있는 경우 https://superuser.com/q/399381을 봐야합니다. 당신이 다시 모양이 문자열을 배치하고 VBA를 사용하여 특정 부분을 포맷 할 경우


, 당신은 모양의 각 단일 텍스트 문자를 나타내는 TextRangeCharacter 속성을 사용합니다. 이제 이러한 문자 객체를 사용하여 원하는 형식을 지정할 수 있습니다.

자세한 내용은 https://msdn.microsoft.com/de-de/library/office/ff743845.aspx을 참조하십시오 (해당 설명서는 PowerPoint 용이지만 Word에도 적용됩니다).

+0

안녕하십니까, 텍스트에서 제거 (디버그를 볼 때 확인할 수 있음)하지만 문서의 개체를 업데이트하지 않습니다. 코드를 실행 한 후에 변경 사항을 볼 수 없습니다. –

+0

결과를 다시 모양에 넣으려고 했습니까? – Leviathan

+0

성공 sugget 코드로 텍스트를 삭제하고 새 텍스트를 넣습니다. ActiveDocument.Shapes (1) .TextFrame.TextRange.텍스트 = newTextShape. 하지만 모양 객체의 디자인도 삭제됩니다 (디자인이란 글꼴, 섹션으로 나누기 ...). 필자는 find 함수를 사용해야한다고 생각하지만 그렇게 할 것을 모릅니다. –

관련 문제