高分求解: 在Excel里用VBA判断某一DOC文件是否已打开及其后续操作

DawnPine 2005-06-14 12:50:05
高分求解: 在Excel里用VBA判断某一DOC文件是否已打开及其后续操作





在Excel里用VBA把Excel的数据写入一个DOC文档
当Excel的VBA运行时,DOC文档可能已经被用户打开,这样就会报错
希望在用
Set wDoc = WordApp.Documents.Open(strWordName)
语句打开DOC文件之前检测该DOC的状态
如果是关闭状态当然最好
如果已打开,VBA可:
1. 将其关闭,并且可以用程序控制关闭时是否保存
2. 或者获取该对象并能对且做后续操作(比如该对象应能支持paragraphs属性等)

判断是否已打开比较好办,利用出错陷井就行了,麻烦在后续的处理上。

这个问题能解决最好
解决不了就当是散分帖吧
算是庆祝俺从一个三角升俩三角
吼吼 终于有一洗一换的啦
...全文
126 点赞 收藏 7
写回复
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
DawnPine 2005-07-08
非常感谢!
先结帖
试了之后如果有疑问再来请教
回复
DawnPine 2005-07-07
回楼上
你这个好象解决了判断文档是否已打开的问题
如果我现在要关闭Doc1.doc且不保存它该怎么做呢?
回复
flili 2005-07-07
这个好办:

Sub Test()

Dim app As Object
Dim doc As Object


'获得对象引用,如果文档未打开则会打开它,如果不想打开它就按前面说的去检测它
Set doc = GetObject("c:\doc1.doc", "Word.Document")
Set app = doc.Application

app.Visible = True '如果你希望文档一定要显示就保留这行

doc.Close savechanges:=False '关闭它且不保存

'在没有提示下关闭Application
app.DisplayAlerts = False
app.Quit

'注意:
'因为除了c:\doc1.doc之外,可能还有其它的文档在同一个application下运行
'所以你关闭Application时要顾及其它的文档


'这个问题最重要的是“如何获得对象引用”
'用doc.Application获得Application对象(Application对象是最顶层的对象)
'之后你就可以通过属性和方法去控制其它对象


'所有对象的属性和方法在VBA帮助里都有详细的说明,有时间就看看!


'你可以用单步模式(按F8),看看每行有何变化...
End Sub
回复
flili 2005-07-06
这个问题以前我也想解决,也想了很久,也曾经有象你这样想过,后来就搁下了...

今天又看到了这个问题,激发了热情,找呀找,后来灵机一动: 能不能用DDE呢?

因为我很喜欢用DDE,所有有此一动,闲话少说。

看如下VBA代码:

Sub Test()
Dim ch As Long
Dim arr As Variant
Dim i As Long

On Error Resume Next

Application.DisplayAlerts = False

ch = Application.DDEInitiate("WinWord", "System")
arr = DDERequest(Channel:=ch, Item:="Topics")

For i = 1 To UBound(arr)
Debug.Print arr(i)
Next

Debug.Print ch, Err.Number

Application.DDETerminate ch
End Sub

运行后,在立即窗口里出现信息:
System
C:\Doc1.doc
文档 2
C:\Documents and Settings\Lily\Application Data\Microsoft\Templates\Normal.dot
9 0

从以上可以看到:
有两个文档在运行,分别是: C:\Doc1.doc 和 一个新建未存盘的“文档 2”


到此问题已经解决了吧!!!

回复
zhuangyumei 2005-06-16
来,,我来顶一下!!

回复
DawnPine 2005-06-16
郁闷!
散分都没人来接?!
回复
xinliangyu 2005-06-14
在此路过
回复
发动态
发帖子
Office开发/ VBA
创建于2007-08-27

4967

社区成员

其他开发语言 Office开发/ VBA
申请成为版主
社区公告
暂无公告