Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 3556|回复: 10

[已解决]从treeview窗体中打开excel文件后,不能先关闭打开的文件

[复制链接]
发表于 2013-10-22 08:32 | 显示全部楼层 |阅读模式
我用treeview做的一个文件遍历,出来后,我想用按钮打开选中的item。打开可以了。但是关闭所打开的excel时,会直接先把窗体的excel文件关闭。
如打开某个  利润表。再关这个  利润表  时,会把有原excel关闭。而不是关掉  利润表。
请问如何可以 先关闭 打开的那个  利润表?因为我还想在窗体中再打开别的表。

QQ截图20131022081946.png

如图,当我打开利润表时,可正常打开,但我关闭利润表时,excel会先关闭有窗体的excel文件。

(但我本意是关掉利润表后,我还想在窗体中打开别的报表。)

代码是:

Private Sub CommandButton3_Click()

Dim aaa As Workbook

If Len(TreeView1.SelectedItem.Key) = 8 Then

    Set aaa = Workbooks.Open(ThisWorkbook.Path & "\2011年报表\" & _

    TreeView1.SelectedItem.Parent.Parent.Text & "\" & TreeView1.SelectedItem.Parent.Text & "\" & _

    TreeView1.SelectedItem.Text)

    aaa.Activate

End If

End Sub

另外我还想问一下,如何dim定义TreeView1.SelectedItem的类型,如我用bbb=TreeView1.SelectedItem,那bbb会直接得到TreeView1.SelectedItem的text。我是想用bbb来代替TreeView1.SelectedItem.这句。要不我的代码就像上面一样很长。


最佳答案
2013-10-22 09:08
dim item as node
set itm=TreeView1.SelectedItem

node下有个FULLPATH属性,用好这个,就不用parent.parent了。

vba\\' - 副本.zip

107.83 KB, 下载次数: 10

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2013-10-22 08:38 | 显示全部楼层
回复

使用道具 举报

发表于 2013-10-22 09:01 | 显示全部楼层
关闭直接workbook.close false方法嘛。
回复

使用道具 举报

发表于 2013-10-22 09:08 | 显示全部楼层    本楼为最佳答案   
dim item as node
set itm=TreeView1.SelectedItem

node下有个FULLPATH属性,用好这个,就不用parent.parent了。

回复

使用道具 举报

发表于 2013-10-22 09:09 | 显示全部楼层
QQ截图20131022091036.jpg

另外你用有模的方式打开工作簿,意义不大,浏览工作簿的数据不方便嘛。
回复

使用道具 举报

发表于 2013-10-22 09:11 | 显示全部楼层
打开选定的工作簿就用getobject函数,这样避免重复打开时workbooks.open方法会报错
只是打开指定的工作簿后,设置下VISIBLE属性。

回复

使用道具 举报

 楼主| 发表于 2013-10-22 10:54 | 显示全部楼层
hwc2ycy 发表于 2013-10-22 09:08
dim item as node
set itm=TreeView1.SelectedItem

这个着实好用啊。
原来的代码:
Private Sub CommandButton3_Click()
Dim aaa As Workbook
If Len(TreeView1.SelectedItem.Key) = 8 Then
    Set aaa = Workbooks.Open(ThisWorkbook.Path & "\2011年报表\" & _
    TreeView1.SelectedItem.Parent.Parent.Text & "\" & TreeView1.SelectedItem.Parent.Text & "\" & _
    TreeView1.SelectedItem.Text)
    aaa.Activate
End If
End Sub

现在的代码:
Private Sub CommandButton3_Click()
Dim item As Node
Set item = TreeView1.SelectedItem
If Len(item.Key) = 8 Then Workbooks.Open ThisWorkbook.Path & "\" & item.FullPath
End Sub

省了大事了。
回复

使用道具 举报

 楼主| 发表于 2013-10-22 11:00 | 显示全部楼层
本帖最后由 hktkzyz 于 2013-10-22 11:08 编辑
hwc2ycy 发表于 2013-10-22 09:01
关闭直接workbook.close false方法嘛。

版主,这个我不是很明白。
这个貌似是在窗体中加个按钮,来使用wookbook.close方法,关闭刚才打开的 报表文件吧?
而且如果打开了多个 报表,那么要关闭的wookbook的名称也不太好确定吧?

如果我是想直接操作 报表文件呢,比如我用open打开了 利润表。然后对利润表更改数据后,想直接点x号关闭它呢?
回复

使用道具 举报

 楼主| 发表于 2013-10-22 11:04 | 显示全部楼层
hwc2ycy 发表于 2013-10-22 09:11
打开选定的工作簿就用getobject函数,这样避免重复打开时workbooks.open方法会报错
只是打开指定的工作簿后 ...

这个貌似比较难。能否结合本例,给出代码,学习一下。
回复

使用道具 举报

 楼主| 发表于 2013-10-22 14:47 | 显示全部楼层
解决了,原来把treeview的showmodal = false就可以了。
但不明白到底为什么?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-24 02:52 , Processed in 0.431424 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表