vb如何控制当前已打开的excel文档

yxzyxz 2004-12-12 08:50:37
我写了一个excel的addin,加一个按钮到excel的工具栏,Button_Click事件里可以新建

Excel.Workbook,并进行控制,但无法控制已打开的excel文档,我想控制当前文档, 这样的功能应

该非常有用,比如,你按下金山快怿的按钮,就会翻译当前你打开的文档,不可能再新建一个

workbook,问题是如何连接到当前内存中的excel对象。在excel的宏里:

ActiveWindow.View = xlPageBreakPreview '将视图设置成分页预览模式,可以通过,在vb里必

须创建新的Excel.Application,并且操纵新建的文档,我试过msdn中GetObject代码,可没效果。那

位指点一下,msdn中的代码如下:

'声明必要的 API 例程:
Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName as String, _
ByVal lpWindowName As Long) As Long

Declare Function SendMessage Lib "user32" Alias _
"SendMessageA" (ByVal hWnd as Long,ByVal wMsg as Long _
ByVal wParam as Long, _
ByVal lParam As Long) As Long

Sub GetExcel()
Dim MyXL As Object '用于存放
'Microsoft Excel 引用的变量。
Dim ExcelWasNotRunning As Boolean '用于最后释放的标记。

'测试 Microsoft Excel 的副本是否在运行。
On Error Resume Next '延迟错误捕获。
'不带第一个参数调用 Getobject 函数将
'返回对该应用程序的实例的引用。
'如果该应用程序不在运行,则会产生错误。
Set MyXL = Getobject(, "Excel.Application")
If Err.Number <> 0 Then ExcelWasNotRunning = True
Err.Clear '如果发生错误则要清除 Err 对象。

'检测 Microsoft Excel。如果 Microsoft Excel 在运行,
'则将其加入运行对象表。
DetectExcel

'将对象变量设为对要看的文件的引用。
Set MyXL = Getobject("c:\vb4\MYTEST.XLS")

'设置其 Application 属性,显示 Microsoft Excel。
'然后使用 MyXL 对象引用的 Windows 集合
'显示包含该文件的实际窗口。
MyXL.Application.Visible = True
MyXL.Parent.Windows(1).Visible = True
'在此处对文件
'进行操作。
' ...
'如果在启动时,Microsoft Excel 的这份副本不在运行中,
'则使用 Application 属性的 Quit 方法来关闭它。
'注意,当试图退出 Microsoft Excel 时,
'标题栏会闪烁,并显示一条消息
'询问是否保存所加载的文件。
If ExcelWasNotRunning = True Then
MyXL.Application.Quit
End IF

Set MyXL = Nothing '释放对该应用程序
'和电子数据表的引用。
End Sub

Sub DetectExcel()
'该过程检测并登记正在运行的 Excel。
Const WM_USER = 1024
Dim hWnd As Long
'如果 Excel 在运行,则该 API 调用将返回其句柄。
hWnd = FindWindow("XLMAIN", 0)
If hWnd = 0 Then '0 表示没有 Excel 在运行。
Exit Sub
Else
'Excel 在运行,因此可以使用 SendMessage API
'函数将其放入运行对象表。
SendMessage hWnd, WM_USER + 18, 0, 0
End If
End Sub


...全文
212 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qixiao 2004-12-18
  • 打赏
  • 举报
回复
up
yxzyxz 2004-12-17
  • 打赏
  • 举报
回复
新发一个简易版的,只有104k,下载地址:http://free.efile.com.cn/yxzyxz/AutoPrint.exe
yxzyxz 2004-12-17
  • 打赏
  • 举报
回复
研究了几天msdn,终于做了一个样本,各位大虾给看看吧,有什么意见请发ydpd@sina.com,下载地址:http://free.efile.com.cn/yxzyxz/AutoPrint.rar。
caimps 2004-12-14
  • 打赏
  • 举报
回复
对阿
vba本来就是很简便的东西
marckle 2004-12-14
  • 打赏
  • 举报
回复
vba的话不需要这么麻烦.

dim theXls as new excel.application
dim theBok as excel.workbook
dim theSht as excel.worksheet

set thebok = theXls.open....open可以指定文件名,你只需要获取文件名就可以了.另外,VBA也支持activesheet对象,可以对当前处于激活的sheet直接操作.

5,172

社区成员

发帖
与我相关
我的任务
社区描述
其他开发语言 Office开发/ VBA
社区管理员
  • Office开发/ VBA社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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