ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 2536|回复: 8

[求助] 请教:打开Eexel文件后,后台其他已隐藏的Excel文件被连带显示出来的问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-6-12 17:52 | 显示全部楼层 |阅读模式
    冒昧打扰一下,有以下问题需要请教,希望能帮我解惑,谢谢!

    在软件中,先打开一个A.xls文件,设置Application.Visible = false后进行操作。A.xls未关闭的情况下,在系统中打开B.xls文件,B.xls文件被显示出来的同时,连带A.xls也被显示出来了;若软件关闭A.xls文件并退出,会导致A.xls和B.xls两个文件同时被关闭。
    查看任务管理器,在打开了一个A.xls文件时,任务管理器中生成了一个et.exe的进程,然后在系统中打开B.xls文件,任务管理中会立即生成另外一个et.exe的进程,然后这个新et.exe关闭,紧接着系统界面同时显示出A.xls和B.xls文件。
    问题1:A.xls文件是被隐藏起来后进行操作,此时系统打开B.xls文件使得A.xls文件被显示出来,如何避免或解决?
    问题2:如果问题1不能避免,是否有办法使打开A.xls文件时生成的et.exe进程被独占?即不与后打开的B.xls文件共用一个进程。
    问题3:如果问题1、问题2都不能避免,是否有办法在软件关闭A.xls文件时,B.xls文件保留显示,不被同时关闭

    谢谢各位专家。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-13 10:38 | 显示全部楼层
求大神帮忙解决,谢谢

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-14 08:04 | 显示全部楼层
每日一顶,求大神帮忙解决,谢谢

TA的精华主题

TA的得分主题

发表于 2018-6-14 08:47 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
你就只控制A.xls就可以了,不需要对整个Application进行控制。
ThisWorkbook.Windows(1).Visible = False
如果不是在工作簿控制的,就通过判断当前所有的工作簿名称来进行显示和关闭吧。

我不知道你的exe是用什么写的,但是exe应该都可以判断自身是不是已经运行来避免二次运行。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-15 08:55 | 显示全部楼层
    隐藏是弄好了,但是有另外一个问题:
    在exe中是新建了一个Application对象(新生成了一个进程A),然后通过这个对象打开A.xls文件并隐藏,这个时候都没问题。但是,如果这个Application对象没退出的情况下,系统打开的B.xls也是由这个对象管理,此时问题来了:如果我自己的exe程序退出,会导致由这个exe程序建立的Application对象被回收,导致B.xls立即退出。
    B.xls被退出不是我所希望的,希望各位大神给点建议,谢谢

TA的精华主题

TA的得分主题

发表于 2018-6-20 14:21 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
lly10011 发表于 2018-6-15 08:55
隐藏是弄好了,但是有另外一个问题:
    在exe中是新建了一个Application对象(新生成了一个进程A), ...

你的exe文件退出时是将整个Excel的Application关闭了吧?
你退出exe的时候用Close Workbook的方式关闭A.xls,不要用Quit Application的方式退出。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-22 15:55 | 显示全部楼层
wolfmare 发表于 2018-6-20 14:21
你的exe文件退出时是将整个Excel的Application关闭了吧?
你退出exe的时候用Close Workbook的方式关闭A. ...

我的exe程序在打开Excel文件时,创建了et进程,当exe程序关闭时,该et进程也自动关闭了。
根据您给的建议,我测试了一下:
1、系统未打开任何excel文件
2、exe程序打开A文件,并隐藏操作,此时任务管理器中有一个et进程
3、系统打开B文件,系统界面显示出B文件内容(不要进行任何编辑操作),此时任务管理器中仍然只有一个et进程
4、exe程序关闭A文件(Close Workbook),此时任务管理器中仍然有一个et进程,B文件正常显示
5、关闭exe程序,B文件同时被关闭,此时任务管理中的et进程消失

winform.button.oncommand = function(id,event){
    if ("关闭Excel文件" == winform.button.text) {
        book.Windows(1).Visible = true; book.save(); book.close();
        //if (0 == excel.Workbooks.Count) {
        //    excel.Quit(); excel = null;                                                    // 释放所有对excel对象的引用
        //}
        winform.button.text = "打开Excel文件";
        
        return;
    }
   
    var file_path = fsys.dlg.open("Excel文件|*.xls;*xlsx|",,,winform.hwnd);
    if (null == file_path) {
        return;
    }
   
    excel = com.excel(true);
    if (!excel) error ("Excel未正确安装!");
   
    excel.Visible = false;                                                                // Excel窗口不可见

    book = excel.WorkBooks.open(file_path); book.Windows(1).Visible = false;
   
    var sheet = book.Worksheets(1);
    sheet.Cells(1,1).Value2 = tostring(time(, "%Y%m%d%H%M%S"));
    sheet.Range("A1").HorizontalAlignment     = -4108/*_xlCenter*/; sheet.Columns(1).ColumnWidth = 48;
   
    winform.button.text = "关闭Excel文件";
}

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-22 15:58 | 显示全部楼层
wolfmare 发表于 2018-6-20 14:21
你的exe文件退出时是将整个Excel的Application关闭了吧?
你退出exe的时候用Close Workbook的方式关闭A. ...
我的exe程序在打开Excel文件时,创建了et进程,当exe程序关闭时,该et进程也自动关闭了。
根据您给的建议,我测试了一下:
1、系统未打开任何excel文件
2、exe程序打开A文件,并隐藏操作,此时任务管理器中有一个et进程
3、系统打开B文件,系统界面显示出B文件内容(不要进行任何编辑操作),此时任务管理器中仍然只有一个et进程
4、exe程序关闭A文件(Close Workbook),此时任务管理器中仍然有一个et进程,B文件正常显示
5、关闭exe程序,B文件同时被关闭,此时任务管理中的et进程消失

winform.button.oncommand = function(id,event){
    if ("关闭Excel文件" == winform.button.text) {
        book.Windows(1).Visible = true; book.save(); book.close();
        //if (0 == excel.Workbooks.Count) {
        //    excel.Quit(); excel = null;                                                    // 释放所有对excel对象的引用
        //}
        winform.button.text = "打开Excel文件";
        
        return;
    }
   
    var file_path = fsys.dlg.open("Excel文件|*.xls;*xlsx|",,,winform.hwnd);
    if (null == file_path) {
        return;
    }
   
    excel = com.excel(true);
    if (!excel) error ("Excel未正确安装!");
   
    excel.Visible = false;                                                                // Excel窗口不可见

    book = excel.WorkBooks.open(file_path); book.Windows(1).Visible = false;
   
    var sheet = book.Worksheets(1);
    sheet.Cells(1,1).Value2 = tostring(time(, "%Y%m%d%H%M%S"));
    sheet.Range("A1").HorizontalAlignment     = -4108/*_xlCenter*/; sheet.Columns(1).ColumnWidth = 48;
   
    winform.button.text = "关闭Excel文件";
}

附件压缩文件是编译生成的程序,可以试下

隐藏Excel.rar

414.48 KB, 下载次数: 2

TA的精华主题

TA的得分主题

发表于 2018-6-25 08:33 | 显示全部楼层
lly10011 发表于 2018-6-22 15:58
我的exe程序在打开Excel文件时,创建了et进程,当exe程序关闭时,该et进程也自动关闭了。
根据您给的建议 ...

抱歉,除了VB,其他的代码我真不懂。

不过,你可以试试用判断文件名的方式来关闭,不需要关闭整个excel。
先判断A文件是否存在,再判断当前打开的excel文件数,如果>1,用workbook close的方式关闭A文件;反之,用Quit的方式关闭整个excel。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-27 03:57 , Processed in 0.042173 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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