Установить значение в ячейке таблицы слов как диапазон - PullRequest
0 голосов
/ 05 мая 2018

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

Dim BMRange As Word.Range  


Set BMRange = Activedocument.Tables(1).Cell(2, 2).range


Activedocument.Bookmarks.Add Name:="ExampleBookmark", Range:=BMRange 


Set BMRange = Activedocument.Tables(1).Cell(2, 3).Range
BMRange .Collapse wdCollapseStart

BMRange.InsertCrossReference ReferenceType:="Bookmark", ReferenceKind:= _
wdContentText, ReferenceItem:="ExampleBookmark", InsertAsHyperlink:=True, _
IncludePosition:=False, SeparateNumbers:=False, SeparatorString:=" "

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Когда вы добавляете закладку в любую часть таблицы, вы можете ссылаться на числовые значения в любой ячейке этой таблицы из любого места в документе, используя поле формулы, закодированное в виде строк:

{= Сумма (Tbl B2)}

, где «Tbl» - это имя закладки, а «B2» - ссылка на ячейку.

Что касается того, что вы делаете, вам даже не нужна закладка, поскольку она находится в той же таблице. Просто используйте поле формулы, закодированное как:

{= В2}

Вы можете сделать это программно таким образом:

Dim Rng As Range
With ActiveDocument
  Set Rng = .Tables(1).Cell(2, 3).Range
  Rng.End = Rng.End - 1
  .Fields.Add Range:=Rng, Type:=wdFieldEmpty, Text:="=B2", PreserveFormatting:=False
End With

Примечание : если вы создаете поля вручную, пары скобок полей (т. Е. '{}') Для приведенных выше примеров должны быть созданы в самом документе с помощью Ctrl - F9 ( Cmd - F9 на Mac); Вы не можете просто напечатать или скопировать и вставить их из этого сообщения.

0 голосов
/ 05 мая 2018

Я бы пошел следующим образом:

Dim BMRange As Range
Dim tbl1 As Table

With ActiveDocument
    Set tbl1 = .Tables(1)
    Set BMRange = .Range(Start:=tbl1.Cell(2, 2).Range.Start, _
                         End:=tbl1.Cell(2, 2).Range.End)
    BMRange.MoveEnd Unit:=wdCharacter, count:=-1
    .Bookmarks.Add name:="ExampleBookmark", Range:=BMRange
End With

With tbl1.Cell(2, 3).Range
    .Collapse (wdCollapseStart)
    .InsertCrossReference ReferenceType:="Bookmark", ReferenceKind:= _
                          wdContentText, ReferenceItem:="ExampleBookmark", InsertAsHyperlink:=True, _
                          IncludePosition:=False, SeparateNumbers:=False, SeparatorString:=" "
End With

или, с другим стилистическим выбором:

Dim BMRange As Range

With ActiveDocument
    With .Tables(1)
        Set BMRange = .Parent.Range(Start:=.Cell(2, 2).Range.Start, _
                             End:=.Cell(2, 2).Range.End)
    End With

    BMRange.MoveEnd Unit:=wdCharacter, count:=-1    
    .Bookmarks.Add name:="ExampleBookmark", Range:=BMRange

    With .Tables(1).Cell(2, 3).Range
        .Collapse (wdCollapseStart)
        .InsertCrossReference ReferenceType:="Bookmark", ReferenceKind:= _
                              wdContentText, ReferenceItem:="ExampleBookmark", InsertAsHyperlink:=True, _
                              IncludePosition:=False, SeparateNumbers:=False, SeparatorString:=" "
    End With
End With
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...