Свяжите Excel с документом Word с помощью VBA, выбрав определенные строки

#excel #vba #ms-word

#excel #vba #ms-word

Вопрос:

Я пытаюсь создать документ Word из листа Excel.

Например, в моей таблице Excel у меня разные столбцы. Одна из них имеет заголовок «цвет». Я могу ОТФИЛЬТРОВАТЬ этот столбец по названию разных цветов (например, «синий», «зеленый», «желтый» и т.д.).

Допустим, я фильтрую свой столбец цветом «синий».

Что я хотел бы сделать в скрипте VBA, так это выбрать все эти строки, которые имеют цвет «синий» в commun, и скопировать-вставить их в документ word.

Я думал, что у меня это есть, но с помощью сценария, который я использую, я не знаю почему, но вставляются только заголовки моих разных столбцов, независимо от того, что я определяю.

 Sub TestOne()

Dim appWD As Word.Application, wbXL As Excel.Workbook

Set appWD = CreateObject("Word.Application.16")
appWD.Visible = True

debut = Range("A13").End(xlUp).Row
fin = Range("A15").End(xlUp).Row

For i = debut To fin
    'Copy the current row
    Worksheets("Sheet1").Rows(i).Copy
    'tell word to create new document.
    appWD.Documents.Add
    'Tell Word to paste the contents of the clipboard into the new document.
    appWD.Selection.Paste
Next i

'Close the new Word document.
appWD.ActiveDocument.Close

'Save the new document with a sequential file name.
appWD.ActiveDocument.SaveAs Filename:="File"


' Close the new Word application.
appWD.Quit
Set appWD = Nothing

End Sub
  

Если кто-нибудь уже делал подобное или знает, как исправить этот скрипт, я был бы признателен за вашу помощь!

Комментарии:

1. Ваш код ничего не выбирает, но вставляет выделение. Этот выбор должен быть чем-то выбранным до запуска кода. Позвольте мне добавить, что использование Selection объекта — плохая практика. Это еще хуже, когда у вас более одного приложения, потому что Selection в ActiveWindow может быть только то, какое приложение владеет этим окном в любой момент времени во время выполнения кода.

2. Range("A13").End(xlUp) означает «Перейдите к A13; оттуда перейдите вверх , чтобы найти первую использованную ячейку; и верните эту ячейку в качестве диапазона». Range("A13").End(xlUp).Row вернет номер строки этой ячейки. Чаще всего можно начать поиск с последней ячейки в столбце, например Cells(Rows.Count. "A") , чтобы найти последнюю использованную ячейку в столбце A, и, возможно, запустить цикл с первой используемой ячейки Cells(2, "A") . Не ясно, что вы собираетесь, но ваш цикл должен быть очень коротким, возможно, только один цикл.