用OLE自动化把WORD嵌入程序后,Bookmarks.Add()的第二个参数该怎么写?

GDXY 2003-04-10 10:59:32
用录制宏的方法得到添加书签的代码如下:
With ActiveDocument.Bookmarks
.Add Range:=Selection.Range, Name:="abcd"
.DefaultSorting = wdSortByName
.ShowHidden = True
End With
看是看明白了,但是如何把它转化成VC的代码呢?
在VC里,Bookmarks.Add()函数有两个参数,第一个是书签名字的字符串,第二个是个VARIANT*类型,应该是表示书签覆盖的范围的,但是不知道如何写该参数?
...全文
157 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
林仪明 2003-04-16
  • 打赏
  • 举报
回复
晕倒!

这样的问题我当初也是,后来我发贴求这样的转换方法!

http://expert.csdn.net/Expert/topic/1452/1452788.xml?temp=.646969

希望大家以后不要被这样的问题难住
GDXY 2003-04-14
  • 打赏
  • 举报
回复
呵呵,自己搞定了。
COleVariant vt;
vt.vt = VT_DISPATCH;
vt.pdispVal = range.m_lpDispatch;
bkitem = bookmarks.Add("abcd", &vt);
GDXY 2003-04-13
  • 打赏
  • 举报
回复
真的没人知道吗?拜托知道的说一句吧
GDXY 2003-04-13
  • 打赏
  • 举报
回复
谢谢lins(*无间行者*) ,我知道是Selection.Range,我也知道如何创建它,但是我不知道如何将它转化成VARIANT*类型来进行传参(在VC里,Bookmarks.Add()函数有两个参数,第一个是书签名字的字符串,第二个是个VARIANT*类型,应该是表示书签覆盖的范围的),如果您能告诉我如何做,我一定给分。
林仪明 2003-04-13
  • 打赏
  • 举报
回复
就是Selection.Range啊!
下面是SDK:
创建、定义和重定义范围
一般通过这种方法来创建 Range 对象:先声明 Range 类型的对象变量,然后使用 Document 对象的 Range 方法或其他对象的 Range 属性例示该变量,如字符、词、句或 Selection 对象。例如,以下代码可创建两个 Range 对象,都表示活动文档中的第二个句子。

Public Sub GetRangeExample()
' 该示例显示 Range 方法和
' Range 属性如何都返回相同的字符。

Dim rngRangeMethod As Word.Range
Dim rngRangeProperty As Word.Range

With ActiveDocument
If .Sentences.Count >= 2 Then
Set rngRangeMethod = .Range(.Sentences(2).Start, _
.Sentences(2).End)
Set rngRangeProperty = .Sentences(2)
End If
End With

Debug.Print rngRangeMethod.Text
Debug.Print rngRangeProperty.Text
End Sub
利用 Range 方法指定文档的特定区域时,使用该方法的 Start 参数指定该范围开始的字符位置,并使用 End 参数指定该范围的结束位置。文档中第一个字符的字符位置是 0。最后一个字符位置等于文档中字符的总数。可以使用 Characters 集合的 Count 属性确定文档中的字符数。如前面示例中所示,还可以使用 Bookmark、Selection 或 Range 对象的 Start 和 End 属性,来指定 Range 方法的 Start 和 End 参数。可以将 Start 和 End 参数设置成同一数字。在这种情况下,创建的是不包括任何字符的范围。

可以使用对象的 SetRange 方法,设置或重定义 Range 对象的内容。可以使用 Range 对象的 Start 属性或其 MoveStart 方法,指定或重定义范围的起始位置。同样,可以使用 Range 对象的 End 属性或其 MoveEnd 方法,指定或重定义范围的结束位置。

下例中,先使用 Content 属性创建一个包括整个文档内容的 Range 对象。再更改 End 属性,指定该范围的结束位置在文档第一句的末尾。然后使用 SetRange 方法重定义该范围以包括文档的第一段。最后,使用 MoveEnd 方法将该范围的结束位置扩展到文档第二段的末尾。在示例的每一步上,范围中包含的字符数都打印到“立即窗口”。

Public Sub RedefineRangeExample1()
' 此过程说明如何使用多种属性
' 和方法重定义 Range 对象的内容。
' 请参阅 RedefineRangeExample2 过程。
Dim rngSample As Range

Set rngSample = ActiveDocument.Content

With rngSample
Debug.Print "The range now contains " & .Characters.Count _
& " characters."
.End = ActiveDocument.Sentences(1).End
Debug.Print "The range now contains " & .Characters.Count _
& " characters."
.SetRange Start:=0, End:=ActiveDocument.Paragraphs(1).Range.End
Debug.Print "The range now contains " & .Characters.Count _
& " characters."
.MoveEnd Unit:=wdParagraph, Count:=1
Debug.Print "The range now contains " & .Characters.Count _
& " characters."
End With
End Sub
还可以使用 Range 对象的 Find 属性重定义该 Range 对象,以返回 Find 对象。下例说明使用 Find 属性定位活动文档中的文本。如果找到了该文本,Range 对象将被自动重定义,以包含与搜索条件匹配的文本。

With rngRangeText.Find
.ClearFormatting
If .Execute(FindText:=strTextToFind) Then
Set RedefineRangeExample2 = rngRangeText
Else
Set RedefineRangeExample2 = Nothing
End If
End With
很多 Word 对象都具有返回 Range 对象的 Range 属性。可以使用对象的 Range 属性,在必须使用对象本身不能提供的 Range 对象的属性或方法的环境下,返回 Range 对象。例如,以下代码使用 Paragraph 对象的 Range 属性返回 Range 对象,用于格式化文档第一段的文本。

Dim rngPara As Range

Set rngPara = ActiveDocument.Paragraphs(1).Range
With rngPara
.Bold = True
.ParagraphFormat.Alignment = wdAlignParagraphCenter
.Font.Name = "Arial"
End With
识别 Range 对象后,就可以应用该对象的方法和属性,修改该范围的内容或获得关于该范围的信息。使用 Range 对象的 StoryType 属性,可以确定 Range 在该文档中的位置。

GDXY 2003-04-13
  • 打赏
  • 举报
回复
就是啊,但是又知道肯定可以的,因为那么一个函数就摆在那里,却不知道参数如何写。
sunyard 2003-04-13
  • 打赏
  • 举报
回复
vb里调用容易,就是不知道vc里怎么调用
sunyard 2003-04-11
  • 打赏
  • 举报
回复
gz
winphoenix 2003-04-10
  • 打赏
  • 举报
回复
好像传一个空值也行
GDXY 2003-04-10
  • 打赏
  • 举报
回复
我试过了,传空值书签加不上啊?

3,248

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧