Страницы: 1
RSS
Корректная вставка макросом из excel в word
 
Добрый вечер.  
 
Имеется в наличии макрос, который вставляет данные из excel  в word. Пример что получается во вложении. Можно ли все, что не очерчено видимой таблицей заменить на пробелы.  
 
Есть также макрос в word(пранирую заускать из excel), который заменяет границы на пробелы:  
Sub ConvertTablesToText()  
Dim TablesAmount As Long  
 
   With ActiveDocument.Tables      'с таблицами в активном документе Word'  
       If .Count = 0 Then  
           MsgBox "В документе " & ActiveDocument & " нет таблиц Excel и Word."  
       Else  
           TablesAmount = .Count 'запомнили, сколько таблиц было в документе до преобразования их в текст'  
             
           Do  
           .Item(1).ConvertToText vbTab 'преобразует первую таблицу (из имеющихся) в текст,'  
                                                        'разделяя бывшие колонки символами табуляции'  
           TablesAmount = TablesAmount - 1  
           Loop Until TablesAmount = 0 'выходим; теперь все таблицы преобразованы в текст'  
             
       End If  
   End With  
     
End Sub  
 
 
End Sub  
 
Не знаю, как заставить его оставить выделенные поля нетронутыми (документы всегда разные получаются).
 
1. Можно копировать данные из Excel частями, и вставлять в Word то как неформатированный текст (тогда получится текст, разделенный табуляцией), то в формате по умолчанию (тогда получится таблица).  
 
2. Можно конвертировать в текст не таблицу целиком, а диапазон строк.
 
Эксель файл с авто фильтром.....копировать по частям не вариант, это макрос в 40 листов (копировать, то если, это, а это не копировать, т.к. там стоит то-то....)  
 
Меня еще более менее устраивает, когда вставляю вручную....но не очень.....(Не знаю, как заставить word выполнить команду Application.SendKeys с ctrl+v. Использую   word.Selection.PasteExcelTable False, False, True. При "полном False" не сохранят размер шрифта
 
Не вижу смысла в замене ячеек с невидимыми границами на пробелы или табуляцию.  
Поэтому предлагаю макрос для WinWord, который удалит в таблицах активного документа все строки с невидимыми границами и сформирует отдельные таблицы из групп ячеек с видимыми границами.  
 
Оставшиеся пустые ячейки в столбцах не обрабатываются, если нужно - сделайте это самостоятельно. Так как здесь все же форум по Excel, а не по WinWord, то прислушайтесь к озвученным уже советам копировать диапазоны ячеек поочередно из Excel по каким-либо признакам, например, по наличию границ у ячеек.  
 
' ZVI:2011-10-07 Macro for WinWord http://www.planetaexcel.ru/forum.php?thread_id=32538  
' Deleting rows with unvisible borders and split the table  
Sub DelRowsWithBordersDisabled()  
   
 Dim cc As Cell, ToDel As Boolean  
 Dim i&, r&, r1&, r2&, rs&, ts&  
   
 ' Set screen off  
 Application.StatusBar = "Please wait..."  
 Application.ScreenUpdating = False  
   
 ' Main  
 With ActiveDocument.Tables  
   ts = .Count  
   ' Process all documents in reverse order  
   For i = ts To 1 Step -1  
     With .Item(i)  
       ' Loop through rows of the table  
       rs = .Rows.Count  
       For r = rs To 1 Step -1  
         ToDel = True  
         ' Test all cells in row for borders visibility  
         For Each cc In .Rows®.Cells  
           With cc.Borders  
             If .Item(1).Visible + .Item(2).Visible + .Item(3).Visible + .Item(4).Visible < -1 Then  
               ' Exit if more than 1 visible border has been found  
               ToDel = False: Exit For  
             End If  
           End With  
         Next  
         ' Process range of rows  
         If ToDel Then  
           ' Set the indexes of the range to be deleted  
           r1 = r  
           If r2 = 0 Then r2 = r  
         ElseIf r2 > 0 Then  
           ' Delete range with unvisible borders  
           .Parent.Range(.Rows(r1).Range.Start, .Rows(r2).Range.End).Rows.Delete  
           ' Split the table if required  
           If r2 <> rs Then  
             .Rows(r1).Select  
             Selection.SplitTable  
           End If  
           ' Init indexes  
           r1 = 0: r2 = 0  
         End If  
       Next  
       ' Delete upper rows with unvisible borders  
       If r2 > 0 Then .Parent.Range(.Rows(r1).Range.Start, .Rows(r2).Range.End).Rows.Delete  
     End With  
   Next  
 End With  
   
 ' Unfreeze screen  
 Application.StatusBar = False  
 Application.ScreenUpdating = True  
   
End Sub
 
ZVI, Спасибо за пример.    
 
"Не вижу смысла в замене ячеек с невидимыми границами на пробелы или табуляцию." Смысл есть,т.к. Удаляя ячейки без границ, макрос удаляет и описание( название таблиц, комментарии и тд).    
 
К сожалению высказанные мне советы не подходят из-за автофильтра( в экселе порядка 1000 таблиц, в отчет в в word попадает только 10-20). Попробую скомбинировать 2 макроса....может получится что-нибудь путное.
 
{quote}{login=gyv}{date=07.10.2011 11:19}{thema=Re: }{post}Смысл есть, т.к. удаляя ячейки без границ, макрос удаляет и описание( название таблиц, комментарии и тд).{/post}{/quote}  
Так это хорошо или плохо? :-)  
Если хорошо, то почему бы не удалить их (ячейки/строки) полностью, зачем нужны пробелы вместо ячеек? Предложенный мною макрос как раз удаляет, а не меняет на пробелы.  
 
По макросу в Excel все равно же есть какие-то критерии отбора нужных фрагментов ячеек в Excel. Логичнее обработать отфильтрованный диапазон ячеек в Excel по этим критериям и скопировать в Word только необходимое, а не все подряд, чтобы не удалять что-то еще очень медленно и в Word-е.  не знаю, что там за данные, но обычно не имеет значения, сколько тысяч строк нужно обрабатывать в Excel.  Но Вам конечно лучше знать, как поступить с учетом опыта и ситуации.
 
Здравствуйте, как скопировать таблицу Excel в Word, с номерами строк ячеек(1, 2, 3 и т.д.) и с буквами столбцов ячеек(A1, B1, C1 и т.д.) ? Спасибо!
 
уже разобралась, с пом клавиши Prt Sc Sys Rq ))))))))))
 
Плохо. Т.к. Данные в ужаляемых ячейках нужны.  
 
Попробовал сделать, так, но получается ошибка:  
' ZVI:2011-10-07 Macro for WinWord http://www.planetaexcel.ru/forum.php?thread_id=32538  
' Deleting rows with unvisible borders and split the table  
Sub DelRowsWithBordersDisabled()  
 
Dim cc As Cell, ToDel As Boolean  
Dim i&, r&, r1&, r2&, rs&, ts&  
 
' Set screen off  
Application.StatusBar = "Please wait..."  
Application.ScreenUpdating = False  
 
' Main  
With ActiveDocument.Tables  
ts = .Count  
' Process all documents in reverse order  
For i = ts To 1 Step -1  
With .Item(i)  
' Loop through rows of the table  
rs = .Rows.Count  
For r = rs To 1 Step -1  
ToDel = True  
' Test all cells in row for borders visibility  
For Each cc In .Rows®.Cells  
With cc.Borders  
If .Item(1).Visible + .Item(2).Visible + .Item(3).Visible + .Item(4).Visible < -1 Then  
' Exit if more than 1 visible border has been found  
ToDel = False: Exit For  
End If  
End With  
Next  
' Process range of rows  
If ToDel Then  
' Set the indexes of the range to be deleted  
r1 = r  
If r2 = 0 Then r2 = r  
ElseIf r2 > 0 Then  
' Delete range with unvisible borders  
.Parent.Range(.Rows(r1).Range.Start, .Rows(r2).Range.End).Rows.ConvertToText vbTab  
' Split the table if required  
If r2 <> rs Then  
.Rows(r1).Select  
Selection.SplitTable  
End If  
' Init indexes  
r1 = 0: r2 = 0  
End If  
Next  
' Delete upper rows with unvisible borders  
If r2 > 0 Then .Parent.Range(.Rows(r1).Range.Start, .Rows(r2).Range.End).Rows.ConvertToText vbTab  
End With  
Next  
End With  
 
' Unfreeze screen  
Application.StatusBar = False  
Application.ScreenUpdating = True  
 
End Sub  
 
Подскажите,пожалуйста, что делать.
Страницы: 1
Читают тему
Наверх