выделить несколько строк в таблице word

Автор Посетитель 21.03.2024, 21 марта 2024, 11:29

Посетитель 21.03.2024

Необходимо макросом выделить в середине таблицы строки.
затем присвоить выделению определенную высоту (строки)
к примеру для строк с 6 по 20. Сама таблица имеет допустим 40 строк,
номера строк начала и конца выделения известны.
хотелось бы еще понятькакконц строк задать через переменную.

Администратор

Не понятна эта фраза:
хотелось бы еще понятькакконц строк задать через переменную.

Посетитель 21.03.2024

Не понятна эта фраза:
хотелось бы еще понятькакконц строк задать через переменную.

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

Можно наверное перебирать каждую строку циклом и задавать высоту построчно, но некрасиво.

Администратор

В этой фразе нарушено что-то:
хотелось бы еще понятькакконц строк задать через переменную.

Вот это место:
понятькакконц

Поэтому не понятно, что вы спрашиваете. Сами не видите, что в этом месте что-то не так?
А вы стали писать какие-то длинные тексты. Правильнее просто отвечать не те вопросы, которые вам задают: что спросили, то и отвечайте. Зачем вы пишите столько дополнительного текста.

Посетитель 21.03.2024

как правильно задать конец выделяемых строк в выражении 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

Вопрос то у вас по таблице. Удалите из кода всё, что не относится к вопросу, и снова выложите код.

Посетитель 21.03.2024

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

Администратор

Сначала нужно научиться делать действия с Вордом в самом Ворде, а затем уже код адаптировать к Экселю.
Попробуйте сначала сделать то, что вам нужно, в самом Ворде.