Я пытаюсь использовать 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
Как я могу избавиться от строк (или ячеек), где «не указана переменная документа»?
Спасибо. Это дает ошибку «Объект не поддерживает это свойство или метод». Есть ли способ отладки, который я могу сделать, чтобы узнать, что представляет собой текущий выбор? Как я могу убедиться, что текущий выбор - это плохие строки? – PtIV
Хорошо. Попробуйте вставить его после удаления поля. Вы также можете установить точку останова, перейти к документу слова и посмотреть, где находится курсор. Чтобы выполнить оператор rows.delete, он должен находиться в таблице. – blckbird
'fld.Delete', за которым следует' wrdDoc.Selection.Rows.Delete', дает ту же ошибку. 'fld.Select', за которым следует' wrdDoc.Selection.Rows.Delete', дает ту же ошибку, хотя текст «Ошибка» выбран в документе слова. – PtIV