Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.07.2009, 10:21   #1
Nash1
 
Регистрация: 01.07.2009
Сообщений: 8
По умолчанию Перенос форм из Экселя в Ворд

С сохранением форматирования средствами Ворд. Ячейки в Экселе мелкие, поэтому при копировании и вставке сбиваются все размеры. Также из-за того, что в строке по 40 мелких ячеек невозможно вбивать данные на лиц, которые создают фирмы. А нам для нормальной работы - чтобы вбивать данные - нужны формы в Ворде 2003. Речь идёт о формах для регистрации фирм нового образца, которые вступили в действие с 1 июля 2009. ссылочка на формы - h**p://www.nalog.ru/index.php?topic=forms_gosreg312fz
Nash1 вне форума Ответить с цитированием
Старый 02.07.2009, 11:06   #2
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Могу перенести в Word вручную. Пишите. Контакты в профиле
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 05.07.2009, 12:45   #3
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Сделал макрос, который находит в книгах Excel ячейки, требующие объединения, и объединяет их.

На скриншоте обработанные ячейки помечены цветом:



Теперь можно работать с этими формами и в Excel (без ручного переноса в Word)

Результаты обработки:
Цитата:
На листе стр.1 произведено 17 объединений ячеек
На листе стр.2_Лист А произведено 20 объединений ячеек
На листе стр.3_Лист Б произведено 22 объединений ячеек
На листе стр.4_Лист В произведено 2 объединений ячеек
На листе стр.5_Лист Г произведено 11 объединений ячеек
На листе стр.6_Лист Г(2) произведено 48 объединений ячеек
На листе стр.7_Лист Г (3) произведено 16 объединений ячеек
На листе стр.8_Лист Д произведено 26 объединений ячеек
На листе стр.9_Лист Е произведено 26 объединений ячеек
На листе стр.10_Лист Ж произведено 2 объединений ячеек
На листе стр.11_Лист З произведено 2 объединений ячеек
На листе стр.12_Лист И произведено 1 объединений ячеек
На листе стр.13_Лист К произведено 36 объединений ячеек
На листе стр.14_Лист К(2) произведено 4 объединений ячеек
На листе стр.15_Лист Л произведено 39 объединений ячеек
На листе стр.16_Лист Л(2) произведено 11 объединений ячеек
На листе стр.17_Лист М произведено 17 объединений ячеек
На листе стр.18_Лист М(2) произведено 42 объединений ячеек
На листе стр.19_Лист М(3) произведено 11 объединений ячеек
На листе стр.20_Лист Н произведено 40 объединений ячеек
На листе стр.21_Лист Н(2) произведено 15 объединений ячеек
На листе стр.22_Лист Н(3) произведено 2 объединений ячеек
EducatedFool вне форума Ответить с цитированием
Старый 05.07.2009, 12:46   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Вот весь код (может, кому пригодится для обработки ужасно оформленных шаблонов документов из налогового ведомства)

Код:
Sub ОбъединениеЯчеек() ' основной макрос
    Application.DisplayAlerts = False: On Error Resume Next
    Dim sh As Worksheet: Application.ScreenUpdating = False
    For Each sh In ActiveWorkbook.Worksheets
        ОбъединениеЯчеекЛиста sh: DoEvents
    Next sh
    Application.DisplayAlerts = True
End Sub

Sub ОбъединениеЯчеекЛиста(ByRef sh As Worksheet)
    Dim cell As Range, lcell As Range
    Dim s As Range, a As Range, ce As Range: n = 0
    For Each cell In sh.UsedRange.Cells
        If НачалоКлетки(cell) Then
            Set lcell = ПоследняяЯчейкаКлетки(cell)
            If Not lcell Is Nothing Then
                Set s = sh.Range(cell, lcell): txt = ""
                For Each ce In s: txt = txt & ce.Text: Next ce
                txt = WorksheetFunction.Trim(txt):    'Debug.Print s.Address, s.Cells.Count, txt
                s.Merge: s.Cells(1) = txt: n = n + 1:    's.Interior.Color = vbGreen
            End If
        End If
    Next cell
    Debug.Print "На листе " & sh.Name & " произведено " & n & " объединений ячеек"
End Sub

Function НачалоКлетки(ByRef cell As Range) As Boolean
    НачалоКлетки = cell.Borders(xlEdgeTop).LineStyle <> xlNone And cell.Borders(xlEdgeLeft).LineStyle <> xlNone
End Function

Function КонецСтроки(ByRef cell As Range) As Boolean
    КонецСтроки = cell.Borders(xlEdgeRight).LineStyle <> xlNone And cell.Borders(xlEdgeBottom).LineStyle <> xlNone
End Function

Function ПоследняяЯчейкаКлетки(ByRef cell As Range) As Range
    If cell.MergeCells Then Exit Function
    Dim lcell As Range: Set lcell = cell
    While Not Intersect(lcell, cell.Parent.UsedRange) Is Nothing
        If КонецСтроки(lcell) Then Set ПоследняяЯчейкаКлетки = lcell: Exit Function
        Set lcell = lcell.Next
    Wend
End Function
Результат обработки - во вложении:
(обратите внимание, что порой попадается лишний текст, как, например, на листе стр.3_Лист Б формы p13001_260609.xls в ячейках i41:i43 - его не видно, но при объединении ячеек он станет виден)

Макрос далеко не самый быстрый из возможных, поэтому на обработку одного файла уходит 10-30 секунд.
Вложения
Тип файла: rar nash_chelovek2002.rar (432.3 Кб, 36 просмотров)

Последний раз редактировалось EducatedFool; 05.07.2009 в 12:57.
EducatedFool вне форума Ответить с цитированием
Старый 06.07.2009, 23:09   #5
Sebastian
 
Регистрация: 17.02.2008
Сообщений: 9
Вопрос Перенос форм из Экселя в Ворд

Уважаемый Educated Fool, а Ваш макрос обрабатывает только эти документы, или его можно применять к разным другим, созданным любимыми ФНСниками?
Sebastian вне форума Ответить с цитированием
Старый 07.07.2009, 06:32   #6
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
макрос обрабатывает только эти документы, или его можно применять к разным другим, созданным любимыми ФНСниками?
Не проверял, но, скорее всего, подойдёт к любым (где все столбцы узкие и одинаковые по ширине)

Почему-то им было лень оформить документы как надо (к примеру, из 19 полей 15 могут состоять из объединённых ячеек, а 4 оставшиеся - из 5 мелких ячеек каждое)

Как я уже указывал, присутствуют неточности обработки:
Цитата:
порой попадается лишний текст, как, например, на листе стр.3_Лист Б формы p13001_260609.xls в ячейках i41:i43 - его не видно, но при объединении ячеек он станет виден
В этом случае придётся подчистить несколько ячеек вручную.
Но в этом виноват не макрос, а кривые руки сотрудников ФНС.

Если есть возможность - проверьте макрос на других документах, и сообщите результат.
EducatedFool вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перенести таблицы Экселя в Ворд Nash1 Фриланс 5 02.07.2009 09:46
Копирование участка текста из Экселя в Ворд Devourer12345 Microsoft Office Excel 3 30.07.2008 08:13
из экселя в БД Shark2112 Microsoft Office Excel 1 16.10.2007 08:04
защитить лист экселя от копирования nextaty Microsoft Office Excel 11 01.12.2006 21:27