#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")
. Не ясно, что вы собираетесь, но ваш цикл должен быть очень коротким, возможно, только один цикл.