Создать отчет в Word из Excel

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

seergy,

Код: Выделить всё

Я хотел модифицировать макрос для создания отчёта, добавить макрос скрыть ячеёки =0
а можно глянуть на макрос? И вообще, несколько непонятно. :confused:
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
seergy
Сообщения: 109
Зарегистрирован: 25 ноя 2007, 21:31

Sub Macro1()
ActiveSheet.UsedRange.Cells.SpecialCells(xlCellTypeVisible).Copy Destination:=Sheets("__").[A1]

End Sub


Sub Макрос8()
'
'
Dim c As Range
For Each c In Range("a1:q66") 'выбор проверяемой ячейки
If c = "" Then 'сравнение с нулем
c.Select 'выбор ячеек
Selection.EntireRow.Hidden = True 'скрыть строку
End If
Next
End Sub
Определяют значения как пустые, т.е. нулевые прикопировании макросами спец ставки:
Sub св1()
'
' св1 Макрос
' Макрос записан 07.04.2008 (seergy)
'

'
Range("B33:R50").Select
Selection.Copy
Range("Q29").Select
Sheets("отчёт cв").Select
Range("A1:Q18").Select
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
Range("R1").Select
End Sub
Sub св2()
'
' св1 Макрос
' Макрос записан 07.04.2008 (seergy)
'

'
Range("B33:R50").Select
Selection.Copy
Range("Q29").Select
Sheets("отчёт cв").Select
Range("A19:Q36").Select
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
Range("R1").Select
End Sub
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

seergy, может я опять что-то не так понял. Напишите макрос спецвставки вот так

Код: Выделить всё

Sub spec_copy()
Worksheets("Лист2").Range("A1").Copy
Worksheets("Лист1").Range("A4").PasteSpecial Paste:=xlValues
End Sub

Sub spec_copy_range()
Worksheets("Лист2").Range("A1:A10").Copy
Worksheets("Лист3").Range("A1").PasteSpecial Paste:=xlValues
End Sub
после копирования, проверил Вашим макросом скрытия строк. Все видит.
кстати и Ваш марос

Код: Выделить всё

Sub св1()
Range("A1:A10").Select
Selection.Copy
Range("A1").Select
Sheets("Лист3").Select
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
Range("A1").Select
End Sub
работает, т.е. после его работы, макрос скрытия строк работает нормально. Так что не понятна суть проблемы. :confused:
p.s. а от Select, после отладки макроса, надо избавляться.
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
seergy
Сообщения: 109
Зарегистрирован: 25 ноя 2007, 21:31

Большое спасибо..
С уважением...
seergy
Сообщения: 109
Зарегистрирован: 25 ноя 2007, 21:31

Виктор я сам вот. что придумал и сам решил: см. файл.
С уважением...
Вложения
Решение.zip
(36.81 КБ) 68 скачиваний
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

seergy, пример от ZVI очень даже приличный. А вот с Вашим файлом непонятно, даже то, что работало куда-то делось :confused: , а то что есть - не работает.
Попытаюсь разобраться с Вашим вопросом в примечании.
Например, этот лист1 скрыт.

тогда для чего он?
На листе 2 имеется ввод данных, по которым и формир отчёт.
готовый отчет к экспорту или заготовка?
После ввода новых данных в тот же документ ворд вставлялся новый отчёт
ниже предыдущего?
p.s. вопрос "вдогонку". Ранее Вы ставили вопрос, чтобы пустые строки в отчете вырезались. Теперь же я вижу что Ваш макрос выделяет строки с данными, но в отчете Word присутствуют пробелы (пустые строки). Это так надо? :confused:
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
seergy
Сообщения: 109
Зарегистрирован: 25 ноя 2007, 21:31

Например, этот лист1 скрыт. тогда для чего он?

Ответ : на лист Х (условно Лист1) макросом спец вставки вставляется отчёт, при этом лист скрыт. Если вы заметили я сделал макрос, кот копирует значение только не пустых ячеек (ячеёки идут подрят и меняются в диапозрне от А1 до А110). Т. о. в ворд вставляется не 110 позиций, а например 30 или 70 по факту)

На листе 2 имеется ввод данных, по которым и формир отчёт. готовый отчет к экспорту или заготовка?
Ответ: на листХ (условно Лист2) существуют ячейки задания значений. т.е. исходные данные, и формы :списки. счётчики и т.п. подвязанные к базам даных. На основании, кот. и формируется отчёт каскадно через 2-3 листа с помощью сложных комбинированных формул: ВПР, ГРП. если то, индекс, ""; и т.п. Далее весь исходный результат копир. нна лист Х (условно Лист1) макросом спец вставки, т.е. готовый отчет к экспорту в ворд.
После ввода новых данных в тот же документ ворд вставлялся новый отчёт. ниже предыдущего? :confused:
Да ниже как в примере кнопка "добавить в ворд". при этом только не заданный диапозон, а описываемый вот таким кодом...:
Set wdDoc = wdApp.Documents.Add
Columns("A:A").Select
Range("A4").Activate
Selection.SpecialCells(xlCellTypeConstants, 3).Select
ActiveWindow.SmallScroll Down:=-18
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
True, Transpose:=False
Суть в том, что отчёт висит в ворде, на листХ (условно Лист2) задаются новые значения и условия, котрые при нажатии второй кнопки "добавить в ворд" в тот же документ ворд вставлялся новый отчёт. ниже предыдущего, а старый очёт табличкой копируется на сводный лист это я сам давно реализовал).

Ранее Вы ставили вопрос, чтобы пустые строки в отчете вырезались. Теперь же я вижу что Ваш макрос выделяет строки с данными, но в отчете Word присутствуют пробелы (пустые строки). Это так надо :confused:
Нет это временное решение: окончательный вариант:
Columns("A:A").Select
Range("A4").Activate
Selection.SpecialCells(xlCellTypeConstants, 3).Select
ActiveWindow.SmallScroll Down:=-18
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
True, Transpose:=False.
Пробелы для примера, хотя я могу немного модифицировать макрос спец вставки с условием пропуск пуст. ячейки. :rolleyes: ;)
Уважаемый Виктор, благодаря Вам научился, владеть отдельными процедурами, а вот совместить макросы не получается Ваши и из примера, то что я задумал может дать фору ПО фирм продающих аналоги за десятки тысяч рублей на FOXpro. А у меня в одной книге 5-10 таких программ и сводные отчёты по разделу.
С уважением...
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

seergy, давайте так, посмотрите вот это. Лист2 и модуль 3.
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
seergy
Сообщения: 109
Зарегистрирован: 25 ноя 2007, 21:31

Здорово, но не много не то, чтобы было понятно, как вы просили, даю заготовку...
С уважением...
Вложения
А это мой вариант к Вашему примеру .zip
(17.23 КБ) 76 скачиваний
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

Тогда смотрите, так?
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
Ответить