Связать excel и word макрос

Обновлено: 08.07.2024

.Range("C27").Formula = "=" & sFT.Cells(r + 1, 1).Address(external:=True)
.Range("D27").Formula = "=" & sFT.Cells(r + 1, 23).Address(external:=True)
.Range("G27").Formula = "=" & sFT.Cells(r + 1, 3).Address(external:=True)
.Range("H27").Formula = "=" & sFT.Cells(r + 1, 4).Address(external:=True)
.Range("H28").Formula = "=" & sFT.Cells(r + 1, 5).Address(external:=True)
.Range("H29").Formula = "=" & sFT.Cells(r + 1, 6).Address(external:=True)
.Range("H30").Formula = "=" & sFT.Cells(r + 1, 7).Address(external:=True)
.Range("I27").Formula = "=" & sFT.Cells(r + 1, 8).Address(external:=True)
.Range("I28").Formula = "=" & sFT.Cells(r + 1, 9).Address(external:=True)
.Range("I29").Formula = "=" & sFT.Cells(r + 1, 10).Address(external:=True)
.Range("I30").Formula = "=" & sFT.Cells(r + 1, 11).Address(external:=True)
.Range("J28").Formula = "=" & sFT.Cells(r + 1, 16).Address(external:=True)
.Range("K28").Formula = "=" & sFT.Cells(r + 1, 17).Address(external:=True)
.Range("L27").Formula = "=" & sFT.Cells(r + 1, 12).Address(external:=True)
.Range("L28").Formula = "=" & sFT.Cells(r + 1, 13).Address(external:=True)
.Range("L29").Formula = "=" & sFT.Cells(r + 1, 14).Address(external:=True)
.Range("L30").Formula = "=" & sFT.Cells(r + 1, 15).Address(external:=True)
.Range("G38").Formula = "=" & sFT.Cells(r + 1, 27).Address(external:=True)
End With
Next r
MsgBox "Готово"
GoTo fin

erHdl:
If Err.Number = 91 Then 'Object variable or With block variable not set
wb.Sheets("Шаблон").Copy
Set wb1 = ActiveWorkbook
Resume shRdy
End If
MsgBox "Непредвиденная ошибка" & Err.Number & vbLf & Err.Description, vbCritical

fin:
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub

На основе шаблона он создает книгу и в зависимости от числа строк в общей таблице, создает такое же число листов. Необходимо по такому же принципу формировать листы в документе Word. То есть, есть шаблон в Word к которому будет обращаться макрос и связывать ячейки из Excel с закладками в шаблоне. Связь должна быть RTF. Как такое можно реализовать, подскажите пожалуйста?

Нередко возникают ситуации, когда информацию, приведенную в электронной таблице, нужно использовать для создания договоров, отчетов и других важных документов. Этот нелегкий процесс можно автоматизировать с помощью слияния данных из MS Excel и Word.

Что такое слияние Excel и Word?

Под слиянием подразумевается перенос данных из электронной таблицы в Word.

Как осуществить слияние данных Ворд и Эксель?

Слияние данных осуществляется в несколько шагов. Сначала осуществляется подготовка данных таблицы на уровне Эксель, после чего осуществляется перенос информации в Word.

Есть несколько требований к исходной таблице, которые должны быть соблюдены:

  1. Обязательно, чтобы каждый столбец таблицы, которая переносится в вордовский файл, был озаглавлен. При этом названия должны быть разными, не допускаются повторы.
  2. Кроме этого, в таблице не должно содержаться ячеек, которые были перед этим соединены. В ином случае при переносе строки могут смещаться, что вызовет много дополнительных сложностей.

Простыми словами, уже на этапе создания таблицы Эксель она должна быть в таком же формате, как таблица в Ворд.

Шаг 1. Подготовка данных таблицы Excel (источника данных)

Итак, давайте немного разберемся с тем, как подготовить таблицу. Желательно переконвертировать диапазон в формат умной таблицы с помощью комбинации клавиш Ctrl + T. После этого нужно непосредственно осуществить настройку и подготовку данных.

Настройка источника данных

После создания умной таблицы ее нужно настроить. Это можно сделать стандартными средствами Эксель. В конечном итоге, она должна иметь такой вид.

Главное правило подготовки источника данных – проверка соблюдения описанных выше требований и адаптацию таблицы под них. Это делается вручную, путем разъединения ячеек и добавления заголовков к колонкам.

Шаг 2. Подготовка шаблона документа Word

В рамках этого шага нужно создать вордовский документ, в который будут заноситься данные из экселевской таблицы. Предположим, нам нужно сделать рассылку, в которую вставлять подходящие данные. Соответственно, на этапе подготовки шаблона документа Word нужно написать письмо, в котором есть общие строки для всех данных.

На скриншоте ниже эта информация отображается сними цветом.

Слияние данных MS Word и MS Excel

2

Настоятельно рекомендуется, чтобы работа была более удобной, установить параметр «Затенение полей» на значение «Всегда». Так будет значительно проще различать, какие данные были вставлены автоматически, а какие уже были в шаблоне. Просто соответствующие места будут выделены серым цветом. Естественно, это выделение не сохраняется при печати, данные выглядят так, как будто письмо набиралось вручную.

Работа с Мастером слияния Word

Наиболее удобно использовать мастер влияния, чтобы перенести часть данных из Эксель в Ворд. Для этого открываем наш шаблон в Word, после чего нажимаем кнопку «Начать слияние», которая находится на вкладке «Рассылки» (все это касается версий Office, начиная с 2007).

Далее нужно выбрать пункт «Пошаговый мастер слияния».

Слияние данных MS Word и MS Excel

3

Если же используется старая версия Microsoft Office, то эта функция все равно есть, но чтобы получить к ней доступ, нужно воспользоваться такими пунктами меню: Сервис – Письма и рассылки – Слияние. Также можно вывести соответствующую кнопку на панель инструментов, чтобы сделать работу более комфортной.

Важно особенно акцентировать внимание на то, что в шаблоне, который был создан на предыдущем этапе, должен содержаться общий текст. То есть, даже слово «Уважаемый» нужно написать без окончания – «Уважаем». Далее оно будет вставлено автоматически.

А теперь опишем на практике, как мастер слияния используется:

  1. Сначала выбирается тип документа. Это могут быть как электронные, так и обычные письма. Также возможен выбор ряда других типов документов. 4
  2. Далее надо выбрать тот документ, который будет использоваться для рассылки писем (или того, что вы выбрали на предыдущем этапе). Это может быть как текущий документ, так и находящийся в другом файле. Также можно выбрать пункт «Шаблон». В двух последних случаях будет предложено выбрать файл, в который будут автоматически вставляться данные из Эксель таблицы. В нашем примере мы выберем пункт «Существующий документ». 5
  3. Выбор получателей. В случае с нами в качестве получателей будет использоваться список контактов из Эксель таблицы. Соответственно, нас интересует пункт «Использование списка». А непосредственно выбрать тот список, который будет использоваться в качестве источника данных, можно с помощью кнопки «Обзор», которая располагается немного ниже. 6
  4. Далее нужно выбрать файл с источником данных. После того, как он будет выбран, появится диалог, в котором будет та же таблица, которая у нас есть в экселевском документе. Далее нужно выбрать те записи, которые нас интересуют в конкретный момент времени. Если все, то достаточно просто нажать клавишу ОК. Если появляется такая необходимость, можно осуществить сортировку перечня, фильтрование соответствующих данных или же воспользоваться соответствующими командами, чтобы их найти. Конечно, в Excel встроенный фильтр значительно функциональнее, но в целом, можно отсеять ряд данных, основываясь на текстовых или числовых значениях. Также, с помощью галочек можно выбирать те записи, которые будут использоваться при ручной рассылке.
    В нашем случае в качестве поля, по которому осуществляется фильтрация, выступает поле «Рассылка». В качестве критерия используется значение «да» (в нашей таблице это значение появляется, если в текущем месяце срок действия клубной карты подходит к концу). 7
  5. Теперь нужно приступить к этапу вставки соответствующих полей в подходящие места. Но перед этим не стоит забывать ставить курсор туда, куда нужно. Если же вы забыли, мастер закрывать не придется все равно. В таком случае можно просто перенести поле в то место, которое нужно, уже после вставки поля. В нашем случае курсор был поставлен возле восклицательного знака после части слова «Уважаем». Поскольку нам нужны отдельные поля, то необходимо выбрать пункт «Другие элементы». 8
  6. После того, как нами было выбрано подходящее поле (в нашем случае это имя), нужно подтвердить свои действия путем нажатия кнопки «Вставить». Аналогичную операцию нужно провернуть и со всеми другими полями. То есть, если нам нужно вставить отчество, то нужно нажать по соответствующему полю в списке и нажать ту же кнопку, чтобы его вставить в документ. 9

А вот пример заполнения полей, который был в нашем случае.

Слияние данных MS Word и MS Excel

12

На следующем этапе нужно получившиеся в результате слияния документы пересмотреть. Для этого в окне есть кнопки навигации, нажимая которые можно проверить, все ли правильно сделано. Также с помощью специальных флажков можно отобразить лишь некоторых получаете.

После осуществления этих действий оказывается, что некоторые данные перенеслись неправильно.

13 14

Были убраны нули в начале номера. Вместо того, чтобы отобразить номер 001768 в результате получилось просто 1768. Та же история и с датами, где месяц число были поменяны местами. Аналогичные проблемы могут случиться с любыми другими форматами: десятичными числами, деньгами и так далее. Просто форматирование, которое было в таблице Эксель, не сохраняется при слиянии. Но решение этой проблемы есть.

Для начала надо понять, что каждая дата, время и так далее имеет свой код, который можно просмотреть и откорректировать. ЧТобы это сделать, нужно кликнуть по соответствующему полю правой кнопкой мыши, после чего нажать на «Коды/Значения полей».

В случае с номером клубной карты результат будет такой.

Мы не будем вносить никаких коррективов в код, обойдемся только добавлением формата.

Если вы хоть чуть-чуть пробовали разные форматы в Эксель, то у вас не должно возникнуть никаких проблем с его добавлением. ЧТобы число сделать шестизначным, то нужно в формате поставить шесть нулей. Получится следующий код.

После этого делаем правый клик мышью по соответствующему полю и нажимаем «Обновить поле». После этого проблема должна решиться автоматически.

Код даты вводится так:

Теперь все правильно.

Объединение таблицы Ворд и Эксель

Давайте представим ситуацию, что нам нужно сделать в вордовском документе таблицу, чтобы часть данных была из Excel. При этом важно сделать так, чтобы после вычислений в Экселе данные в Ворде автоматически обновлялись.

Чтобы это сделать, нужно сначала сделать таблицу в Эксель, после чего этот диапазон выделить и скопировать.

После этого нужно воспользоваться функцией «Специальная вставка» Word, которую можно найти в меню «Вставка» и там выбирается опция с листом Майкрософт Эксель.

Чтобы связать таблицы, нужно воспользоваться одноименной функцией.

Слияние текстов Ворда и Эксель

Представим такую задачу: у нас есть Эксель таблица, в которой перечислены люди (их фамилии, имена, отчества), а также их контактные телефоны. Также есть документ Ворд, в котором нужно заполнить пробелы соответствующими именами и номерами телефонов.

Чтобы это сделать, нужно открыть меню «Сервис – Слияние», потом выбрать источник данных и выбрать пункт «Добавить поле слияния». После этого соответствующие поля вставляются в подходящих местах. После нажатия кнопки «Объединить» действие можно считать выполненным.

Выводы

Таким образом, слияние данных Ворда и Эксель позволяет сделать работу более удобной. Это значительно упрощает жизнь в ситуациях, когда есть большое количество данных (например, анкетных), и на их основе нужно создать большое количество документов по шаблону.

Как видим, профессиональное владение офисным пакетом включает не только умение создавать электронные таблицы или текстовые документы, но и осуществлять обмен информацией между двумя приложениями.

Иногда бывает необходимо перенести что-то из Excel в другое приложение. Я возьму для примера Word. Например скопировать ячейки и вставить. Обычно мы это так и делаем - скопировали в Excel, открыли Word - вставили. Но сделать это при помощи кода чуть сложнее, хотя если разобраться никаких сложностей нет. Ниже приведен пример кода, который открывает Word, открывает в нем определенный документ, копирует данные из Excel и вставляет в открытый документ Word.

Sub OpenWord() Dim objWrdApp As Object, objWrdDoc As Object 'создаем новое приложение Word Set objWrdApp = CreateObject("Word.Application") 'Можно так же сделать приложение Word видимым. По умолчанию открывается в скрытом режиме 'objWrdApp.Visible = True 'открываем документ Word - документ "Doc1.doc" должен существовать Set objWrdDoc = objWrdApp.Documents.Open("C:\Doc1.doc") 'Копируем из Excel диапазон "A1:A10" Range("A1:A10").Copy 'вставляем скопированные ячейки в Word - в начала документа objWrdDoc.Range(0).Paste 'закрываем документ Word с сохранением objWrdDoc.Close True ' False - без сохранения 'закрываем приложение Word - обязательно! objWrdApp.Quit 'очищаем переменные Word - обязательно! Set objWrdDoc = Nothing: Set objWrdApp = Nothing End Sub

Tips_Macro_OpenWord.xls (49,5 KiB, 5 668 скачиваний)


В файле-примере, приложенном к данной статье, в комментариях к коду есть несколько добавлений. Например, как вставить текст из ячеек в определенные закладки Word-а и как добавить новый документ, а не открывать уже имеющийся. Так же так есть код проверки - открыто ли приложение Word в данный момент. Порой это тоже может пригодиться, чтобы работать с запущенным приложением Word, а не создавать новое:

В принципе, активировать или вызвать(если закрыто) другое приложение Офиса можно одной строкой:

Sub Open_AnotherApp() Application.ActivateMicrosoftApp xlMicrosoftWord End Sub

но данный метод может пригодиться только в том случае, если Вам необходимо действительно лишь активировать другое приложение, но дальше обращаться к этому приложению Вы уже не сможете.

По сути, методами CreateObject и GetObject можно обратиться к любому стороннему приложению(например Internet Explorer). Куда важнее при обращении к этим объектам знать объектную модель того приложения, к которому обращаетесь. Чтобы увидеть свойства и методы объектной модели приложения, можно в редакторе VBA подключить необходимую библиотеку, объявить переменную, назначив ей тип приложения. Покажу на примере того же Word-а.
Для начала открываем меню Tools - References :

Подключаем библиотеку:

Затем объявляем переменную и присваиваем ей тип нужного приложения:

Sub OpenWord() Dim objWrdApp As Word.Application Set objWrdApp = New Word.Application objWrdApp.Visible = True End Sub

Если теперь в редакторе, внутри этой процедуры в любом месте ниже объявления переменной набрать objWrdApp и точку, то сразу после ввода точки выпадет меню, в котором будут перечислены все доступные методы и свойства этого приложения.

Так же можно нажать F2 и через поиск найти Word и просмотреть все методы и свойства данного приложения.

Метод установки ссылки на библиотеку приложения через Tools-References называют еще ранним связыванием. Подобный метод позволяет создать ссылку на приложение быстрее и, как описано выше, предоставляет разработчику доступ к визуальному отображению свойств и методов объекта. Но есть существенный минус: если в своем коде Вы установите ссылку на Word 12 Object Libbary(Word 2007), то на ПК с установленным Word 2003 получите ошибку MISSING, т.к. Word 2003 относится к библиотеке Word 11 Object Libbary. Подробнее можно прочитать в статье Ошибка — Cant find project or library.
Метод же CreateObject еще называется методом позднего связывания. Применяя его не возникнет проблем с MISSING, очень часто возникающих при раннем связывании. Поэтому я рекомендовал бы при разработке использовать раннее связывание для удобства использования свойств и методов(если Вы их не знаете), а перед распространением приложения в коде заменить все именованные константы(типа wdLine) на числовые константы(для wdLine это 5) и применить позднее связывание. Посмотреть числовое значение константы можно просто записав её в коде, начать выполнение кода через F8 и навести курсор мыши на эту константу. Всплывающая подсказка покажет числовое значение. Так же можно отобразить окно Immediate(View -Immediate Window или сочетание клавиш Ctrl + G ), записать вопросительный знак и вставить эту константу и нажать Enter :
?wdLine
ниже будет выведено числовое представление этой константы.
А заменять эти константы их числовыми значениями в случае с поздним связыванием необходимо, т.к. Excel не знает их значений.
Попробую пояснить поподробнее про эти константы и почему их надо заменять какими-то числами: при подключении библиотеки Wordа(Word 12 Object Libbary) мы так же подключаем и все свойства, методы и константы, которые доступны из Wordа. И их использование напрямую становится доступно из Excel и мы можем смело написать что-то вроде wbLine и Excel поймет эту константу. При позднем же связывании мы уже не подключаем библиотеки Word(во избежание ошибок совместимости) и как следствие - методы, свойства и константы Wordа для Excel становятся чем-то неизвестным и не документированным и мы получим ошибку "Variable not defined"(если включена директива Option Explicit) при попытке назначить свойство через wdLine. Если же Option Explicit не включена - то хоть ошибки не будет, но и код будет работать неверно, т.к. для неизвестной для Excel переменной wbLine будет назначено значение 0(Empty). Поэтому и надо все константы другого приложения заменять их числовыми значениями.

Главная ошибка новичка
И хочу так же упомянуть про ошибку, которую очень часто совершают при обращении к одному приложению из другого. Допустим, необходимо скопировать из Word все данные в Excel. Часто начинающие делают это так:

Sub OpenWord() Dim objWrdApp As Object, objWrdDoc As Object 'создаем новое приложение Word Set objWrdApp = CreateObject("Word.Application") 'Можно так же сделать приложение Word видимым. По умолчанию открывается в скрытом режиме 'objWrdApp.Visible = True 'открываем документ Word - документ "Doc1.doc" должен существовать Set objWrdDoc = objWrdApp.Documents.Open("C:\Doc1.doc") 'Копируем из Word все данные, обращаясь к объекту Range документа Range.Copy 'вставляем скопированное в ячейку А1 активного листа Excel ActiveSheet.Paste 'закрываем документ Word без сохранения objWrdDoc.Close False 'закрываем приложение Word objWrdApp.Quit 'очищаем переменные Word - обязательно! Set objWrdDoc = Nothing: Set objWrdApp = Nothing End Sub

На строке Range.Copy обязательно получите ошибку от VBA, указывающую, что нужен аргумент для объекта. Можно попробовать добавить этот аргумент: Range(1).Copy. Но все равно получим ошибку. Можно, конечно, указать даже ячейки: Range("A1").Copy. Но это приведет к тому, что скопирована будет ячейка А1 активного листа Excel.
Все дело в том, что мы хотим скопировать данные из Word-а, выполняя при этом код из Excel. А у Excel тоже есть объект Range с другими аргументами. И если не указать какому приложению, листу или документу принадлежит Range, то по умолчанию он будет отнесен к тому приложению, из которого выполняется код. Т.е. к Excel. Если совсем кратко об этом - всегда надо указывать какому приложению или объекту принадлежит используемый объект или свойство. Правильно код должен выглядеть так:

Sub OpenWord() Dim objWrdApp As Object, objWrdDoc As Object 'создаем новое приложение Word Set objWrdApp = CreateObject("Word.Application") 'Можно так же сделать приложение Word видимым. По умолчанию открывается в скрытом режиме 'objWrdApp.Visible = True 'открываем документ Word - документ "Doc1.doc" должен существовать Set objWrdDoc = objWrdApp.Documents.Open("C:\Doc1.doc") 'Копируем из Word все данные, обращаясь к объекту Range документа 'при этом перед Range явно указываем откуда его брать - из документа Word -objWrdDoc("C:\Doc1.doc") objWrdDoc.Range.Copy 'вставляем скопированное из Word в активную ячейку активного листа Excel ActiveSheet.Paste 'закрываем документ Word без сохранения objWrdDoc.Close False 'закрываем приложение Word objWrdApp.Quit 'очищаем переменные Word - обязательно! Set objWrdDoc = Nothing: Set objWrdApp = Nothing End Sub

Вместо Range ту же ошибку делают и с Selection(потому что Selection часто присутствует в записанных макрорекордером макросах), т.к. этот объект есть и в Excel и в Word и без явного указания приложения будет относится к приложению, в котором записано.

Tips_Macro_OpenWord.xls (49,5 KiB, 5 668 скачиваний)

А в архиве ниже - практически готовое решение заполнения всевозможных бланков Word из Excel. Как это работает. У нас есть таблица Excel с данными для заполнения бланков заявлений на пособия:

Обращаю внимание, что в первой строке расположены метки. Они нужны для того, чтобы код мог понять значения какого столбца в какое место шаблона Word должны попасть. А в самом шаблоне Word мы должны проставить эти самые метки:

Фигурные скобки сделаны для того, чтобы код 100% искал и заменял только метку в шаблоне, исключая при этом замену случайного текста вне скобок(ведь слово "Должность" может встречаться и само по себе).
А здесь я схематично привел то, как будут происходить замены:

Сначала программа создаст новую папку, в которую и будет сохранять создаваемые файлы(имя папки состоит из даты и времени запуска кода). Далее программа циклом пройдется по каждой строке таблицы, создаст на основании шаблона Word( "Шаблон.doc" ) новый файл для этой строки, заполнит этот шаблона данными на основании меток, и сохранит созданный файл под новым именем. Сам файл шаблона при этом не изменяется - все метки в нем сохраняются как были настроены до запуска кода. Конкретно в приложенном коде значение для имени нового файла берется из первого столбца "ФИО с инициалами". Но это можно изменить в коде при необходимости. Делается это в этой строке:

'считываем фамилию с инициалами sWDDocName = .Cells(lr, 1).Value

Что еще важно: файл шаблона Word должен находиться в той же папке, что и файл с кодом. Название файла в приложенном к статье файле должно быть "Шаблон.doc". Но его так же можно изменить, не забыв изменив его в коде в этой строке:

'имя шаблона Word с основным текстом и метками Const sWDTmpl As String = "Шаблон.doc"

Этот метод можно рекомендовать, когда возникает необходимость переноса данных из таблиц Еxcel для вставки в текстовый документ.

Ранее описанный способ вставки таблицы как графического объекта имеет определенные ограничения, такие, как: невозможность изменения данных, искажения при масштабировании, нечитаемость мелкого шрифта и т.д.

Второй предложенный способ - вставлять листы Excel непосредственно в документ, - приводит к неоправданному "раздуванию" файла, кроме того, внедренные объекты иногда ведут себя непредсказуемо.

Однако, используя технологию Automation, объекты можно не только внедрять, но и связывать.

Сейчас мы свяжем между собой таблицы Еxcel и Word, причем так, чтобы изменения в исходной таблице приводили к изменениям в таблице документа. Итак, у нас есть исходная таблица с расчетами:

Создаем в Word точно такую же, но пустую таблицу:

Заголовки не набираем, а специально оставляем пустые строки.

После проделанных операций, на экране должно быть открыты оба окна: окно MS Word с заготовкой и окно MS Excel с расчетной таблицей. Можем приступать к связыванию. Суть его состоит в том, чтобы последовательно, одна за другой, связать ячейки таблицы с необходимыми позициями в текстовом документе.

Таким образом мы установили связь между текстовой позицией в документе и ячейкой в рабочем листе. Необходимо сразу отметить, что с объединенными ячейками связывание работает не совсем корректно. Аналогично необходимо связать оставшиеся ячейки. Окончательно документ должен выглядеть так:

Теперь мы имеем возможность форматировать таблицу, как нам удобно, при этом изменение данных будет происходить автоматически. Также можно отметить, что таблицу в Word можно использовать как сводную, занося в нее значения из разных листов и даже книг Еxcel.

Режим обновления также можно настраивать. Для этого необходимо:

Способ обновления можно изменять для каждой связи по отдельности, а можно выделить изменить для всех значений или для нескольких сразу.

Данный способ при разовом использовании подходит мало, так как он достаточно трудоемкий на начальном этапе. Однако при частых вычислениях (курсовые, дипломные работы, финансовые отчеты и т.д.) он окупается. Также при изменении структуры таблицы в Excel происходит нарушение связей, что влечет за собой разрушение целостности таблицы в документе. Поэтому связывание лучше выполнять после окончательного формирования расчетных таблиц.

Вы можете помочь в развитии сайта, сделав пожертвование:

--> Или помочь сайту популярной криптовалютой:

BTC Адрес: 1Pi3a4c6sJPbfF2sSYR2noy61DMBkncSTQ

ETH Адрес: 0x7d046a6eaa1bd712f7a6937b042e9eee4998f634

LTC Адрес: LUyT9HtGjtDyLDyEbLJZ8WZWGYUr537qbZ

USDT (ERC-20) Адрес: 0x7d046a6eaa1bd712f7a6937b042e9eee4998f634

Яндекс Деньги: 410013576807538

А тут весь список наших разных крипто адресов, может какой добрый человек пожертвует немного монет или токенов - получит плюсик в карму от нас :) Благо Дарим, за любую помощь! -->

Читайте также: