Korespondencja seryjna programu Word 2010 Pomiń puste pola korespondencji seryjnej

0

Nie mogę uzyskać warunkowej korespondencji seryjnej, aby ukryć puste linie w stosunkowo czysty i wydajny sposób. Jedyne znalezione przeze mnie rozwiązanie to takie, z którego jeszcze nie chcę korzystać, ponieważ uważam, że może być lepszy sposób.

W tej chwili moje warunkowe scalanie wygląda następująco:

wprowadź opis zdjęcia tutaj

Nie oznacza to jednak, że wartości są puste, a na literze pojawia się kilka pustych linii.

Próbowałem zmusić słowo <line_break>lub <paragraph_break>oszukać słowo, aby użyć domyślnego tłumienia pustych znaków. Próbowałem też <paragraph break>całkowicie usunąć po każdej linii.

Rozumiem z tej pomocnej strony , że mogę zrobić coś w rodzaju wyrażenia wielokrotnego, ale wiem też, że oświadczenie to będzie wyglądać bardzo brzydko, bardzo szybko w zależności od ilości warunków, jakie mam.

Czy ktoś ma jakieś pomysły, w jaki sposób mogę ukryć linię pustych miejsc w taki sposób, aby być czystym i schludnym (względnie) i że inni ludzie mogą łatwo zrozumieć przyszłość?

Scott Holtzman
źródło
Rozwiązaniem tego problemu było zwrócenie wartości Null w drugim polu, jeśli pierwsze pole było fałszywe dla każdego z zapytań danych w moim programie Access. Zapytanie jest przechowywane w arkuszu programu Excel do korespondencji seryjnej. Następnie właśnie wymieniłem nazwy pól w dokumencie Word, w kolejnych wierszach, a teraz domyślnie pomija to spacje :) Pozostawię to na razie otwarte, na wypadek, gdyby inni mieli jakieś spostrzeżenia.
Scott Holtzman,

Odpowiedzi:

1

Aby pominąć puste linie, gdy pola korespondencji seryjnej w głównym dokumencie korespondencji seryjnej są puste, należy utworzyć następujący kod w module VBA .

Sub SuppressBlankLines() 
 ActiveDocument.MailMerge.SuppressBlankLines = True 
End Sub

Jeśli „Deweloper” nie jest aktywny / widoczny w dokumencie Word, musisz go włączyć w menu Plik -> Opcje -> Dostosuj wstążkę (pole programisty „zaznacz”). Umożliwi to wybranie systemu programistycznego Visual Basic i dodanie modułu.

Simon Fox
źródło
0

Naprawienie tego rodzaju problemu poprzez manipulowanie źródłem danych (np. Za pomocą zapytania) jest zazwyczaj najlepszym rozwiązaniem. AFAICS, co właśnie zrobiłeś.

Jako tło nie wszystkie puste miejsca w MailMerge są traktowane jako puste do celów eliminacji pustych linii. Zwykłe białe znaki, takie jak spacje i tabulatory, są traktowane jako puste. Pola MERGEFIELD, które mają pusty wynik, są traktowane jako puste. Ale wynik pola IF nigdy nie jest traktowany jako pusty.

Zakładam, że logika, której potrzebujesz, jest zgodna z następującymi zasadami

If ( ext_b1 is False or borrower_1 is blank )
  don't insert anything, not even a blank line
Else (i.e. ext_b1 is True and borrower_1 is not blank )
  insert borrower_1 followed by a paragraph mark
End If

Jeśli tak, a ext_b1 ma zawsze tę samą niepustą wartość, gdy nie jest „False”, a pożyczający_1 nigdy nie ma więcej niż około 120 znaków (to jest OTTOMH, powinieneś sprawdzić), możesz użyć sztuczki z symbolami wieloznacznymi, aby uprościć test IF i uprościć kodowanie pola:

{ IF "{ MERGEFIELD ext_b1 }{ MERGEFIELD borrower_1 }" = "True?*" "{ MERGEFIELD borrower_1 }" "" }
{ IF "{ MERGEFIELD ext_b2 }{ MERGEFIELD borrower_2 }" = "True?*" "{ MERGEFIELD borrower_2 }" "" }

Tyle że tak naprawdę nie eliminuje znaku akapitu, gdy ext_b1 ma wartość False lub pożyczający_1 jest pusty. Aby sobie z tym poradzić, wstaw znak akapitu w polu „Wynik„ prawda ”i umieść wszystkie pola {} JEŻELI w jednym wierszu:

{ IF "{ MERGEFIELD ext_b1 }{ MERGEFIELD borrower_1 }" = "True?*" "{ MERGEFIELD borrower_1 }
" "" }{ IF "{ MERGEFIELD ext_b2 }{ MERGEFIELD borrower_2 }" = "True?*" "{ MERGEFIELD borrower_2 }
" "" }

Aby było to nieco jaśniejsze (mam nadzieję), możesz również zmodyfikować układ kodu pola, umieszczając znaczniki akapitu wewnątrz IF, ale poza tekstem wynikowym IF. Te znaki nie będą częścią wyniku. Nie potrzebujesz również „fałszywego” wyniku. więc np

{ IF "{ MERGEFIELD ext_b1 }{ MERGEFIELD borrower_1 }" = "True?*" 
"{ MERGEFIELD borrower_1 }
" }{ IF "{ MERGEFIELD ext_b2 }{ MERGEFIELD borrower_2 }" = "True?*" 
"{ MERGEFIELD borrower_2 }
" }

Problem z modyfikowaniem układu w ten sposób polega na tym, że ilość miejsca w pionie zajmowanego przez wyrażenie pola zmienia się w zależności od tego, czy użytkownik wyświetla kody pól lub wyniki pól, więc przełączanie się z jednego widoku do drugiego może być niepokojące (szczególnie w duży dokument, w którym Word może również spędzać czas na ponownym analizowaniu, gdy włączasz i wyłączasz wyświetlanie kodu pola).


źródło