首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 怎么在EXCEL里用VBA查阅其他文件的属性 [已结贴,结贴人:jonerthan]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jonerthan
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 揭帖率:
    发表于:2008-08-20 12:45:22 楼主
    在excel里,比如我要查阅c:\a\a.doc的备注属性,并修改成“定稿”,应该怎么写。

    要用documents(...).BuiltInDocumentProperties(wdPropertyComments)的话, 具体的代码应该怎么写?

    求教了

    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • baoguangya
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-20 18:52:101楼 得分:20
    首先要添加对"Microsoft Word 11.0 Object Library"的引用,然后:

    sub test()

        Dim y As New Word.Application

        y.Documents.Open "c:\a\a.doc"

        MsgBox y.Documents("a.doc").BuiltinDocumentProperties("Comments").Value

        y.Documents("a.doc").BuiltinDocumentProperties("Comments").Value = "定稿"

    end sub
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • baoguangya
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-20 18:52:152楼 得分:0
    首先要添加对"Microsoft Word 11.0 Object Library"的引用,然后:

    sub test()

        Dim y As New Word.Application

        y.Documents.Open "c:\a\a.doc"

        MsgBox y.Documents("a.doc").BuiltinDocumentProperties("Comments").Value

        y.Documents("a.doc").BuiltinDocumentProperties("Comments").Value = "定稿"

    end sub
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jonerthan
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-20 19:34:073楼 得分:0
    非常感谢你的回答。若我要取得属性的文件是a.xls,或其他类型的文件,应该怎么定义y呢
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • baoguangya
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-20 19:51:534楼 得分:0
    xls文件更简单,如下:

    sub test()

        workbooks.Open "c:\a\a.xls"

        MsgBox workbooks("a.xls").BuiltinDocumentProperties("Comments").Value

        workbooks("a.xls").BuiltinDocumentProperties("Comments").Value = "定稿"

    end sub

    其他类型如果是PPT,TXT则同理,如果是BMP之类则没有备注属性,也就没办法获得备注属性!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jonerthan
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-20 19:55:145楼 得分:0
    1.另外你的代码是让文件处于打开状态,当我第二次取得备注信息的时候,系统提示a.doc正被使用。

    2.我是想一次取得一批文件的备注信息,
    比如
        列                  备注
    c:\a\a.doc
    c:\a\b.doc
    c:\a\c.doc
    c:\a\d.doc

    我做一个循环,是不是每次都要 用y.Documents.Open ()

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jonerthan
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-20 19:58:596楼 得分:0
    3.我要的是更改  文件 →点右键 →属性→ 摘要 →备注
    我运行了你的代码,属性→ 摘要 →备注里没有更改,你更改的是不是内置的属性,这个我不太懂
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • baoguangya
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-20 20:09:087楼 得分:0
    试试下面这个,对于能否不打开文件的情况下获得备注属性,本人才疏学浅,不知道如何实现,抱歉!

    Sub Test()

        Dim y As New Word.Application
        Dim fs As New Scripting.FileSystemObject
        Dim f As File
       
        For Each f In fs.GetFolder("c:\a").Files
       
            If f.Type = "Microsoft Word 文档" Then
       
                y.Documents.Open f.Path

                MsgBox y.Documents(f.Name).BuiltinDocumentProperties("Comments").Value

                y.Documents(f.Name).BuiltinDocumentProperties("Comments").Value = "定稿"
               
                y.Documents(f.Name).Close True
            End If
       
        Next
       
    End Sub
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • baoguangya
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-20 20:09:198楼 得分:0
    试试下面这个,对于能否不打开文件的情况下获得备注属性,本人才疏学浅,不知道如何实现,抱歉!

    下面的过程需要添加对"Microsoft Scripting Runtime"的引用。

    Sub Test()

        Dim y As New Word.Application
        Dim fs As New Scripting.FileSystemObject
        Dim f As File
       
        For Each f In fs.GetFolder("c:\a").Files
       
            If f.Type = "Microsoft Word 文档" Then
       
                y.Documents.Open f.Path

                MsgBox y.Documents(f.Name).BuiltinDocumentProperties("Comments").Value

                y.Documents(f.Name).BuiltinDocumentProperties("Comments").Value = "定稿"
               
                y.Documents(f.Name).Close True
            End If
       
        Next
       
    End Sub
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • baoguangya
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-20 20:09:149楼 得分:0
    试试下面这个,对于能否不打开文件的情况下获得备注属性,本人才疏学浅,不知道如何实现,抱歉!

    下面的过程需要添加对"Microsoft Scripting Runtime"的引用。

    Sub Test()

        Dim y As New Word.Application
        Dim fs As New Scripting.FileSystemObject
        Dim f As File
       
        For Each f In fs.GetFolder("c:\a").Files
       
            If f.Type = "Microsoft Word 文档" Then
       
                y.Documents.Open f.Path

                MsgBox y.Documents(f.Name).BuiltinDocumentProperties("Comments").Value

                y.Documents(f.Name).BuiltinDocumentProperties("Comments").Value = "定稿"
               
                y.Documents(f.Name).Close True
            End If
       
        Next
       
    End Sub
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jonerthan
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-20 20:19:4810楼 得分:0
    我试了用BuiltinDocumentProperties更改的是内置的属性,不是我要的点右键看到的属性。
    不知道是否要用CustomDocumentProperties?
    不管能不能实现我要的功能,还是向你学习了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jonerthan
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-20 20:26:5511楼 得分:0
    另外我处理的文件有一定的数量,运行时每一个文件都要打开- 关闭的话,速度慢了。不知道有什么好的方法
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • baoguangya
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-20 20:40:4712楼 得分:0
    CustomDocumentProperties指的是自定义文档属性,而备注属于BuiltinDocumentProperties。

    在文件->属性->自定义里面的就是CustomDocumentProperties,摘要里面的是BuiltinDocumentProperties。

    所以,我的代码应该没错。你再试一下,第一个程序之所以不成,是因为修改后没有保存!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jonerthan
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-20 21:15:5213楼 得分:0
    我试了,在VBA里运行,显示属性值已更改成“定稿”,但是在文件夹里我用右键点击看属性备注一栏还是没有更改。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jonerthan
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-20 21:26:2514楼 得分:0
    运行完循环之后,进程里有好几个winword.exe进程,好像是循环一次增加一次,y.Documents(a.doc).Close True 并不能关闭前面开启的进程,是个问题。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • baoguangya
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-20 21:26:3715楼 得分:0
    为什么我的电脑上显示都更改了?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jonerthan
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-20 21:43:5316楼 得分:0
    关闭后你的进程里有winword.exe吗?它怎么一直有?另外我引用的是Microsoft Word 12.0 Object Library,我用的是2007
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • baoguangya
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-21 09:34:1417楼 得分:0
    我在自己的电脑上用2007实验了下面的程序,结果没有WINWORD.EXE进程。添加了一句 CreateObject来创建WORD.APPLICATION; 添加了一句y.quit,来退出进程。

    Sub Test()

        Dim y As Word.Application
        Dim fs As New Scripting.FileSystemObject
        Dim f As File
       
        For Each f In fs.GetFolder("E:\Documents and Settings\Administrator\桌面\ttt").Files
       
            If f.Type = "Microsoft Office Word 文档" Then
               
                Set y = CreateObject("Word.Application")
               
                y.Documents.Open f.Path

                MsgBox y.Documents(f.Name).BuiltinDocumentProperties("Comments").Value

                y.Documents(f.Name).BuiltinDocumentProperties("Comments").Value = "定稿"
               
                y.Documents(f.Name).Close True
               
                y.Quit
            End If
       
        Next
       
    End Sub
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jonerthan
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-21 13:37:1118楼 得分:0
    感谢你的热心帮助。
    我又试了一下,加了y.quit后,解决了winword.exe进程重复出现的问题。
    我在ttt文件夹里有1.doc 和 2.docx 两个文件,按你的代码执行后1.doc的备注没有改,而2.docx的备注改了。
    再比较发现,在1.doc上点右键-属性,出现三个选项卡:常规、自定义、摘要。
                在2.docx上点右键-属性,出现了两个选项卡:常规、摘要。
    是不是因为这个区别,所以导致2.docx的备注修改了,而1.doc的备注没有修改。
    1.doc是我在word里另存为 97-2003(*.doc)创建的。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jonerthan
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-21 13:47:0419楼 得分:0
    改成  If f.Type = "Microsoft Office Word 97 - 2003 文档" Then
    就可以了。
    终于好了,唯一的遗憾是运行的速度太慢了,因为我的初衷是要取得一批文件的备注,做文件目录信息用的。
    谢谢你了。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jonerthan
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-21 13:57:2220楼 得分:0
    如果是1.txt ,我应该是这样定义吗 Dim y As txt.Application
    但系统提示是未定义,是要引用哪个库,还是怎么弄?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • baoguangya
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-21 15:59:3621楼 得分:0
    不是,没有TXT.APPLICATION的。

    我也不知道TEXT文件怎么解决,只能建议改为WORD文件后处理。

    很抱歉!!
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved