2013-04-05 3 views
1

MailMerge 필드가있는 문서가 있지만 전체 datasource-> mailmerge 아이디어를 사용하고 싶지 않습니다. 대신 Autonew()에 UserForm을 표시하고 사용자에게 필드에 데이터를 입력 할 것을 요청합니다.VBA를 사용하여 Word MailMerge 필드 값 변경

이 문서가 한 행의 데이터와 "병합"되어 사용자가 한 행에 대해 전체 데이터 소스를 수행하도록하는 데 시간 낭비가 있기 때문입니다.

대부분의 사람들이 올바른 방법이라고 말하는 확실한 DocVariables를 사용하는 작업 솔루션이 있지만이 클라이언트는 mailmerge 변수 (예 : < < >> 1)를 "보는 것"을 좋아하지만, 소스 문서에서. 그들은 Alt-F9를 사용하여 DocVariables를 볼 수있는 코드를 표시 할 수 있지만 MergeField를 사용하고자한다고 주장합니다.

DocVariables를 사용하여 다음을 사용합니다. 이것은 올바른 생각을 가지고 있으며 나머지 코드는 제대로 작동한다는 것을 알기 때문에 작동합니다.

ActiveDocument.Variables("varSurame").Value = .txtSurname 

그러나 병합 필드에서 동일한 작업을 수행하는 방법을 연습 할 수 없습니다. 나는 아래처럼 뭔가를하고 싶다. (그러나 "value"속성은 없다.)

ActiveDocument.MailMerge.Fields("Surname").value = .txtSurname 

.text 속성은 읽기 전용이므로 사용할 수 없습니다.

다음은 "책갈피가 정의되지 않음"오류를 렌더링합니다.

ActiveDocument.MailMerge.Fields("Surname").Code.Text = .txtSurname 

프로그래밍 방식으로 데이터 소스를 사용하지 않고 편지 병합 필드의 값을 변경하는 방법에 대한 아이디어.

+0

도움말에 따르면 Mailmerge 필드의 .value 속성은 읽기 전용입니다. 나는 그것이 지정된 데이터 소스에서 값을 집어 내기 위해서만 설계된 것 같아요 ... –

+0

대신에 DocVariables에 텍스트 <> 등을 미리 채울 수 있고 DOCVARIABLE 필드를 사용할 수 있습니까? –

답변

2

뭔가 같은 :

Dim f as Word.Field 

For Each f in ActiveDocument.Fields 

    If f.Type = wdFieldMergeField Then 

    ' you will either need to extract the name of the field from f.code here 
    ' (roughly speaking, you should expect to find 
    ' MERGEFIELD<white space><optional double quote>fieldname<optional double quote><white space><possible switches> 
    ' or you could iterate through a list of field names and use instr to look for each name 
    ' then 

    f.Result.Text = "the text you want" 
    End If 
Next ' f 
1

나는 내가 VBA를 통해 Access에서 수정할 수에서는 DocVariable 필드를하고 싶었 Word 문서를했다. 나도 편지 병합 필드를 "보고 싶었다." DocVariable 필드가있는 문서를 작성한 경우 (예 : Insert >> Quick Parts >> Field 및 DocVariable 필드 삽입), 이들은 보이지 않거나 긴 필드 코드 전체를 표시합니다. 그래서 나는 FNAMEDONATION이라는 이름의 글자가 문서로 기부자에게 감사하는 편지에 있다고 가정합니다. $ 100 기부 당신에게 밥 감사 ...

:

최종 문서는 같아야합니다. 그것은 것입니다 ...에서는 DocVariable 필드와

는, 그 중 하나는이처럼 보였다 :

이 ...의 기부에 감사드립니다. 그것은 ...

또는 같은

됩니다

은 ... {에서는 DocVariable "기증"}의 기부에 대한 {에서는 DocVariable "FNAME"} 주셔서 감사합니다. ...

DocVariable 필드에`* MERGEFORMAT '과 같은 것이 있으면 더 길어질 수 있습니다.어리석은 일이긴하지만 편지 병합 필드를 보는 것을 선호한다는 것을 이해하면

...«기부»기부에 감사드립니다.«FNAME».

  1. 편지 병합 필드 문서를 만들기 : 그것은 것입니다 ... 나는 작업에있어

방법이이었다. 필드를 추가하려면 가짜 Excel 파일이나 데이터베이스를 만들어 연결해야 할 수도 있습니다. 이렇게하면 문서의 편지 병합 필드가 표시됩니다 (예 : «FNAME»).

  • 필드 코드 (alt-F9)를 전환하면 { MERGEFIELD "FNAME"}이 표시됩니다.
  • 각 편지 병합 필드에 대해 "MERGEFIELD"를 "DOCVARIABLE"로 바꿉니다. `{ DOCVARIABLE "FNAME"}처럼 보이게하면됩니다.
  • 필드 코드를 다시 토글합니다 (alt-F9). 편지 병합 필드 (예 :`FNAME» ')처럼 보이지만 VBA에서 DocVariable 입력란처럼 사용할 수 있습니다.
  • 실제로 편지 병합 필드를 하나만 삽입 한 다음 다른 필드의 이름을 변경하여 복사/붙여 넣기 할 수 있습니다. DocVariable 필드를 삽입 한 경우 존재하지 않는 내용을 편지 병합 필드에 숨겨져 있어야합니다. 그러나 그 내용을 파악할 수는 없습니다. 이것은 확실히 해결 방법이지만, 저에게는 효과적입니다. 편지 병합 필드를 "보면서"VBA의 DocVariable 필드처럼 사용할 수있는 두 가지 장점을 모두 제공합니다.

    +0

    이상하지만 훌륭한! –

    관련 문제