У меня есть этот файл Excel, который имеет несколько листов, которые я хочу импортировать в буквенный формат Microsoft Word.
Сначала я начал слияние почты с этим файлом Excel и выбрал этот конкретный лист / таблицу, затем я заполнил письмо необходимыми полями и сделал.
После этого я хотел снова объединить почту в тот же файл, но на этот раз выбрал другую таблицу с разными столбцами, которые я хочу заполнить письмом с этими данными. Когда я попытался сделать это, я получил сообщение об ошибке, в котором говорилось, что мне нужно удалить ранее заполненное поле и заменить его новым.
Сообщение об ошибке:
Это поле слияния используется в основном документе, но его нет в источнике данных. Вы можете удалить недопустимое поле слияния из основного документа. Или вы можете заменить его допустимым полем слияния из источника данных.
Необходимые столбцы взяты из разных таблиц в файле Excel, поэтому я извлек данные отдельно.
Как исправить ошибку?
IMO, предложенный jmac, вероятно, самый простой и надежный, если у вас нет доступа к хорошим ресурсам кодирования. Или согласитесь с тем, что вам необходимо скопировать и изменить основной документ Mail Merge для объединения данных с каждого листа.
Существуют и другие способы, но большинство включают программирование или методы, которые, я бы сказал, недостаточно надежны для типичных сценариев, а другой будет работать только при некоторых обстоятельствах.
То, что можно использовать, также зависит от того, хотите ли вы объединить все данные из нескольких листов в один выход или хотите, чтобы отдельные выходы на листе.
Если вы используете поля ADDRESSBLOCK или GREETINGLINE, которые полагаются на отображение полей, все еще сложнее.
Для «отдельных выходов на листе»,
а. Если на каждом листе используются одинаковые столбцы, но с разными именами, вы можете использовать номер столбца вместо имени. Например, предположим, что ваша рабочая книга содержит 2 листа, Sheet1 и Sheet2, и на Листе 1 столбец 1 называется namea, а на Листе 2 столбец 1 называется nameb. Затем (с помощью Alt-F9 для просмотра имен полей) вам понадобится следующее в вашем основном документе слияния для листа1:
{MERGEFIELD namea}
для листа 2
{MERGEFIELD nameb}
Но
{MERGEFIELD 1}
должно работать в обоих случаях. (Это не задокументировано нигде, я знаю).
б. Вы можете использовать «Поля адреса», а не «Поля базы данных». Это страдает от ограничения, которое я обычно воспринимаю как showtopper (я опишу это позже), но оно работает так:
Вместо использования имени столбца ("namea") через {MERGEFIELD namea}, вы используете поле адреса, подобное этому
{MERGEFIELD "Имя" \ m}
При этом используется стандартный набор имен полей, которые вы «сопоставляете» (или «сопоставляете») с именами столбцов на листе Excel. Вы можете выбрать эти поля в полном диалоговом окне Вставить поле, выбрав опцию «Адрес» вместо опции по умолчанию «База данных», и вы можете переназначить поля, используя кнопку «Сопоставить поля ...» в этом диалоговом окне. Вам необходимо установить флажок Запомнить это соответствие для этого набора источников данных на этом компьютере внизу. Затем, когда вы переключаетесь с одного источника данных на другой, Word должен помнить правильные сопоставления.
Это теория, но на практике я думаю, что в большинстве сценариев это неосуществимый подход. Это связано с тем, что Word запоминает (в реестре Windows) только одно сопоставление для каждого имени базы данных. Так что, если у вас есть поле с именем namea на одном листе, и вам нужно сопоставить его с именем, а на другом листе вам нужно сопоставить имя с фамилией, вы не можете это сделать (AFAICS). Хуже того, если кто-то изменит сопоставления, существующие документы слияния могут в итоге получить неверные данные, и пользователь вообще не будет предупрежден.
Подходы, которые включают программирование, включают следующее:
с. у вас есть код (например, код VBA), который собирает и сохраняет нужные вам имена на каждом листе, а затем вставляет правильные имена для каждого поля MERGEFIELD. Для этого вы можете использовать вложенные поля, фактически делая свое собственное отображение. Снова используя пример из (a), вы можете, например, иметь переменную документа с именем "thename", использовать VBA для заполнения ее именами namea или nameb и использовать следующее вложенное поле:
{MERGEFIELD {DOCVARIABLE thename}}
(и это работает только в том случае, если вы можете заставить свой VBA выполнять замены до того, как Word попытается проверить имена полей)
д. (если вам требуется, чтобы выбранные вами листы были объединены в одно объединение, а не одно объединение на лист), вы либо пишете код для автоматизации Excel для объединения листов, используя объектную модель Excel, либо вы получаете Excel (или Access), чтобы сделать это. настроив запрос UNION для объединения листов. Используя наш пример снова, UNION может выглядеть так:
ВЫБЕРИТЕ 1 AS [thesheet], namea AS [thename] ОТ [Sheet1 $]
UNION
ВЫБЕРИТЕ 2, nameb ОТ [Sheet2 $]
Хотя вы можете настроить запрос по этим направлениям в Word VBA, Word имеет ограничение в 511 символов в своих запросах MailMerge, которое вы, скорее всего, превысите. Вы можете настроить запрос в новой книге Excel, чтобы сделать что-то похожее, но я не знаю, есть ли в этом продукте длина запроса или другие ограничения. Кроме того, вы, вероятно, потеряете любые «памятные» данные (длиннее 255 символов), поэтому, опять же, это только опция для некоторых типов источников данных.
источник
objTemplate
установленным в качестве документа Word, с которым я хочу объединиться, вот код:objTemplate.MailMerge.OpenDataSource Name:=(current excel file path & name), Connection:="Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=(current excel file path & name)" , SQLStatement:="SELECT * FROM `(sheet name)`"
Вы пытались зайти в «Выбор получателей» и снова выбрать исходный лист? Если нет, сделайте это и выберите правильный лист.
источник