Необходимо макросом выделить в середине таблицы строки.
затем присвоить выделению определенную высоту (строки)
к примеру для строк с 6 по 20. Сама таблица имеет допустим 40 строк,
номера строк начала и конца выделения известны.
хотелось бы еще понятькакконц строк задать через переменную.
Не понятна эта фраза:
хотелось бы еще понятькакконц строк задать через переменную.
Не понятна эта фраза:
хотелось бы еще понятькакконц строк задать через переменную.
str - переменная.
Полная задача.
Макросом переносится в ворд таблица. Таблицы формируются разной высоты по автофильтру.
Поэтому количество строк для выделения всегда разное.
Вылетает ошибка. смысл ее ясен, где исправить - нет знаний.
Кстати, ошибка вылетает даже если прописать прямо 10 строку
re = appWD.ActiveDocument.Tables(1).Cell(10, 1).Range.End
Сам макрос
Sub В_DOC()
Dim appWD As Word.Application
Dim NamFil, strOutFileName As String
Dim rs, re As Range
Dim str As Double
' имя файла
NamFil = "Приложение " & Split(Range("E7"), Chr(34))(1) & " " & Range("E6") & " " & Range("I7")
' строк в таблице ворд
str = Range("A1152")
Set appWD = CreateObject("Word.Application")
Range("A4:B1167").Copy
appWD.Documents.Add
appWD.ActiveDocument.Range.PasteExcelTable False, False, False
appWD.Visible = True
With appWD
.Selection.WholeStory
.Selection.Font.Name = "Times New Roman"
.Selection.Font.Size = 8
.Selection.Tables(1).Select
.Selection.Tables(1).AutoFitBehavior wdAutoFitWindow
'.Selection.Tables(1).Rows.HeightRule = wdRowHeightAuto
End With
With appWD.ActiveDocument.PageSetup
.LeftMargin = 25
.RightMargin = 25
.TopMargin = 25
.BottomMargin = 25
End With
' выделить нужные строки в ворде и задать их высоту
rs = appWD.ActiveDocument.Tables(1).Cell(6, 1).Range.Start
re = appWD.ActiveDocument.Tables(1).Cell(str + 6, 1).Range.End ' ошибка Object variable or With block variable not set
' здесь могу ошибаться
appWD.ActiveDocument.Range(rs, re).Select
appWD.ActiveDocument.Selection.Tables(1).Rows.HeightRule = wdRowHeightExactly
appWD.ActiveDocument.Selection.Tables(1).Rows.Height = 20
' сохраняем и закрываем
strOutFileName = "R:\" & NamFil & ".doc"
appWD.ActiveDocument.SaveAs Filename:=strOutFileName
appWD.ActiveDocument.Close
End Sub
Можно наверное перебирать каждую строку циклом и задавать высоту построчно, но некрасиво.
В этой фразе нарушено что-то:
хотелось бы еще понятькакконц строк задать через переменную.
Вот это место:
понятькакконц
Поэтому не понятно, что вы спрашиваете. Сами не видите, что в этом месте что-то не так?
А вы стали писать какие-то длинные тексты. Правильнее просто отвечать не те вопросы, которые вам задают: что спросили, то и отвечайте. Зачем вы пишите столько дополнительного текста.
как правильно задать конец выделяемых строк в выражении Range.end
re = appWD.ActiveDocument.Tables(1).Cell(str + 6, 1).Range.End ' ошибка Object variable or With block variable not set
Вам нужно выделить строки для примера с 6 по 20? Или ещё что-то нужно сделать?
Зачем вы показываете это код:
With appWD.ActiveDocument.PageSetup
.LeftMargin = 25
.RightMargin = 25
.TopMargin = 25
.BottomMargin = 25
End With
Вопрос то у вас по таблице. Удалите из кода всё, что не относится к вопросу, и снова выложите код.
Sub В_DOC()
Dim appWD As Word.Application
Dim rs, re As Range
Dim str As Double
str = 20
Set appWD = CreateObject("Word.Application")
rs = appWD.ActiveDocument.Tables(1).Cell(6, 1).Range.Start
re = appWD.ActiveDocument.Tables(1).Cell(str + 6, 1).Range.End
appWD.ActiveDocument.Range(rs, re).Select
End Sub
Сначала нужно научиться делать действия с Вордом в самом Ворде, а затем уже код адаптировать к Экселю.
Попробуйте сначала сделать то, что вам нужно, в самом Ворде.