2015-01-29 3 views
1

Я пытаюсь использовать Visual Basic, чтобы я мог заполнять шаблоны слов данными из excel. У меня есть макрос, который заполняет поля в таблице документов Word из таблицы в Microsoft Excel. Пока таблица excel меньше, чем таблица слов, в таблице слов выводится сообщение «Ошибка! Нет переменной документа», и я удаляю это поле с помощью макроса (ниже). НО, я также хочу удалить целые строки в таблице Word, где возникает эта ошибка. Можете ли вы помочь мне выяснить, как это сделать?Удалить строку, когда поля пустые

Sub Rectangle_Click() 
Dim wrdApp As Word.Application 
Dim wrdDoc As Word.Document 
Dim ws As Worksheet 
Dim oHeader As Word.HeaderFooter 
Dim oSection As Word.Section 
Dim oFld As Word.Field 
Dim flds As Word.Fields 
Dim fld As Word.Field 
Set ws = ThisWorkbook.Sheets("Sheet1") 
ws.Activate 
On Error Resume Next 
Set wrdApp = GetObject(, "Word.Application") 
If wrdApp Is Nothing Then Set wrdApp = CreateObject("Word.Application") 
On Error GoTo 0 
wrdApp.Visible = True 
Set wrdDoc = wrdApp.Documents.Add(Template:="C:\Documents\mytemplate.dotm") 
With wrdDoc 
    .Variables("foo1").Value = Range("A5").Value 
    .Variables("foo2").Value = Range("A6").Value 
    .Variables("foo3").Value = Range("A7").Value 
    .Variables("bar1").Value = Range("B5").Value 
    .Variables("bar2").Value = Range("B6").Value 
    .Variables("bar3").Value = Range("B7").Value 
    .Range.Fields.Update 
End With 
wrdDoc.Range.Fields.Update 
Set flds = ActiveDocument.Fields 
For Each fld In flds 
    If fld.Type = wdFieldDocVariable Then 
     If fld.Result = "Error! No document variable supplied." Then 
      Debug.Print fld.Code 
      'ALSO DELETE THE ROW WHERE THIS EMPTY FIELD WAS FOUND!!' 
      fld.Delete 
     End If 
    End If 
Next 
Set wrdDoc = Nothing 
Set wrdApp = Nothing 
Application.CutCopyMode = False 
End Sub 

Как я могу избавиться от строк (или ячеек), где «не указана переменная документа»?

ответ

0

Если вы хотите удалить всю строку таблицы, где ваш текущий выбор затем использовать:

Word.Selection.Rows.Delete 
+1

Спасибо. Это дает ошибку «Объект не поддерживает это свойство или метод». Есть ли способ отладки, который я могу сделать, чтобы узнать, что представляет собой текущий выбор? Как я могу убедиться, что текущий выбор - это плохие строки? – PtIV

+0

Хорошо. Попробуйте вставить его после удаления поля. Вы также можете установить точку останова, перейти к документу слова и посмотреть, где находится курсор. Чтобы выполнить оператор rows.delete, он должен находиться в таблице. – blckbird

+0

'fld.Delete', за которым следует' wrdDoc.Selection.Rows.Delete', дает ту же ошибку. 'fld.Select', за которым следует' wrdDoc.Selection.Rows.Delete', дает ту же ошибку, хотя текст «Ошибка» выбран в документе слова. – PtIV

Смежные вопросы