我录制了一段WORD的宏,包括把文件另存为RTF的一个操作,可是录制好以后发现另存的文件名是固定的,就是: ActiveDocument.SaveAs FileName:="文件.rtf",以后只要执行宏,不管我打开的文件是什么都存成“文件.rtf”这个怎么办能?
是否有一个函数可以返回当前打开的文件名啊。这样就可以做以下的操作吧
i = 函数(返回当前文档名)
ActiveDocument.SaveAs FileName:=i & ".rtf"
我试过一个叫Application.MacroContainer.FullName的,可是不行。
先谢谢了

解决方案 »

  1.   

    tryActiveDocument.SaveAs FileName:=ActiveDocument.Name & ".rtf",
      

  2.   

    真是不错,成功了。
    但是有一个美中不足,生成的文件名会带有以前的扩展名。如“文件.DOCX.RTF”,有没有办法把.DOCX去掉?
    另外这些东西在哪可以学到,我在网上逛了两个小时想自己研究出来怎么弄,最后失败了。
    还有,我是不是点下面的“结贴”问题点数就能生效?
      

  3.   


    activedocument.Name 是不带扩展名的啊。
      

  4.   

    8、如何给分和结贴?
    http://community.csdn.net/Help/HelpCenter.htm#结帖
      

  5.   


    带的,我用的是word2007,是否有关系?
    我试了下如果我转一个DOCX到RTF,那么就是文件名.DOCX.RTF,试了下再转DOCX如果再转就变成了.DOCX.RTF.DOCX
      

  6.   

    用 activedocument.Name 获取‘当前文档名称’不正确吧!
    这个属性返回的是‘活动文档’的名称。楼主之所以是‘成功的’,只是凑巧而已,他的操作状态下,‘活动文档’就是‘当前文档’。
    严格说来,取‘当前文档名称’应该用的是:ThisDocument.Name
    楼主要去掉文件名末尾的‘.doc’,可以试试这样:
    ActiveDocument.SaveAs FileName:=Replace(ThisDocument.Name, ".doc", "", 1, , vbTextCompare) & ".rtf"这句代码对文件名中没有胡乱加入.doc的文件,执行结果是没问题的。如果文件名中包含.doc,用这段就万无一失了:
    Dim strNewName$
    strNewName = ThisDocument.Name
    If (LCase$(Right$(strNewName, 4)) = ".doc") Then strNewName = Left$(strNewName, Len(strNewName) - 4)
    ActiveDocument.SaveAs FileName:=strNewName & ".rtf"
      

  7.   

    楼主的文件扩展名是“.DOCX”?
    那我的代码中的 ".doc" 就得全部换为 ".docx" 了。
    还有,第二段代码中的两个 4 要换成 5 。
      

  8.   

    谢谢楼上,我测试了下,ThisDocument.Name反而不行。生成的文件名会变成Normal.dotm。不过删除多余扩展名的操作倒是很好用的。