Word 2007 VBA макрос паузы для пользователя, чтобы вручную выбрать позицию курсора или диапазон с помощью мыши - PullRequest
0 голосов
/ 29 сентября 2019

У меня есть много макросов, которые действуют на выбранный диапазон (например, строку в таблице), только часть активного документа, в Word 2007. (Они выполняют несколько задач с одним и тем же выбором - например, форматируют указанные строки, заменяют несколькопробелы с вкладками, изменение размера изображений и т. д.)

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

Похоже, что поле ввода не имеет такой возможности в слове?

Может кто-нибудь помочь с тем, как этого можно достичь?

Я сделал это в Excel с InputBox, но код не работает в Word, и не смог найти ничего полезного в Google ...

Это код в Excel, который делаетчто я хочу сделать в слове:

     'input box prompt+pause to select range
    Set User_RangeSelection = Application.InputBox("select cells to move, with the mouse", Default:=Selection.Address, Type:=8)
        If User_RangeSelection Is Nothing Then 'if cancel is clicked - otherwise selects existing cell selection
            MsgBox "No Selection made, exiting."
'            Exit Sub 'cancels the whole macro after this routine!
        End If
'---------------------------------------------------
    User_SelectedRange = User_RangeSelection.Address(False, False) 'name the selection as a range
    Range(User_SelectedRange).Select 'selects range IN SHEET; OR enter single commands here
'------------------------- Code to execute on/with selection

Код / синтаксис для слова явно совершенно другой - перепробовал много изменений, но ни один не получил прошлые всплывающие коды ошибок.

«TYPE: = 8» «ИМЕНИВАЕМЫЙ АРГУМЕНТ НЕ НАЙДЕН»

После удаления вышеуказанной строки в поле ввода отображается бит из 1 строки выбранной фактической строки, В СООТВЕТСТВИИ НЕ отображается область, выделенная в документе, ине разрешает щелкать в документе

«Диапазон», добавляемый в конце «Ожидаемый: конец оператора»

«адрес» - «Метод или элемент данных не найден»

«диапазон» «подпрограмма или функция не определены»

1 Ответ

0 голосов
/ 29 сентября 2019

Действительно, способ, которым Word реализует VBA InputBox, отличается от Excel.Excel - это «одна большая таблица»;Word на самом деле «просто текст», отформатированный на экране, чтобы выглядеть как таблица, где это необходимо.Это «почему» за поведением, FWIW.

Вы должны быть в состоянии сделать что-то подобное, но это займет немного больше работы.Я не могу дать вам точное решение, так как точные требования не ясны, и это будет немного "слишком широко".Но чтобы начать работу с основной частью «указать диапазон» ...

(Примечание: я набираю это из памяти на мобильном устройстве, поэтому могут быть синтаксические ошибки)

Dim CellRef as String, RowIndex as Variant, ColIndex as Variant
Dim CommaPos as Long
Dim Tbl as Word.Table, Cel as Word.Cell, Dim rng as Word.Range

If Selection.Information(wdWithinTable) Then
  CommaPos = Instr(CellRef, ",")
  CellRef = InputBox("Type in the cell row and column (1,3)")
  If CommaPos <> 0 Then
    RowIndex = Left(CellRef, CommaPos-1)
    ColIndex = Mid(CellRef, CommaPos + 1)
    Set tbl = Selection.Tables(1)
    Set Cel = tbl.Cell(rowIndex, colIndex)
    Set rng = cel.Range
  Else
    MsgBox "Please enter a correct cell reference")
  End If
Else
  MsgBox "Please click in the table, first"
End If
...