ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

EH搜索     
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
Excel不给力? 何不试试FoxTable! Excel 2016函数公式学习大典 Office知识技巧免费学 打造核心竞争力的职场宝典
300集Office 2010微视频教程 Tableau-数据可视化工具 精品推荐-800套精选PPT模板,点击获取 ExcelHome出品 - VBA代码宝免费下载
你的Excel 2010实战技巧学习锦囊 欲罢不能, 过目难忘的 Office 新界面 Excel VBA经典代码实践指南
查看: 260|回复: 12

[求助] 求一个判断工作簿存在的代码!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-1-30 15:12 | 显示全部楼层 |阅读模式
我有多个Excel文件。表里的布局是一致的。想把数据全部统一到一张表格里处理。
基本上能做到了。但是出现的问题是,如果少一个工作簿,代码执行就不正常。个人想了很多办法。但才疏学浅。实现不了。相加 IF 判断,又不知道写。
请大神帮忙指点下。万分感谢!!!
        For Each w In Application.Windows
            If InStr(w.Caption, "工作簿1") Then w.Activate
        Next
        '定位A列最后一个有数据的单元格
        i = Cells(Rows.Count, 1).End(xlUp).Row
        Range(Cells(1, 1), Cells(i, 4)).Copy
        For Each w In Application.Windows
            If InStr(w.Caption, "测试") Then w.Activate
        Next
        i = Cells(Rows.Count, 1).End(xlUp).Row + 1
        Range("a" & i).Select
        ActiveSheet.Paste

就是这一段想加一个判断。如果工作簿1不存在。就不执行右面的。

合并统计.rar

60.86 KB, 下载次数: 13

TA的精华主题

TA的得分主题

发表于 2020-1-30 17:59 | 显示全部楼层
听描述是数据汇总,怎么缺一个工作簿会不正常?不就是数据少一点吗?

TA的精华主题

TA的得分主题

发表于 2020-1-30 18:18 | 显示全部楼层
For Each w In Application.Windows
            If InStr(w.Caption, "测试") Then
                w.Activate
                '定位A列最后一个有数据的单元格
                i = Cells(Rows.Count, 1).End(xlUp).Row
                Range(Cells(1, 1), Cells(i, 4)).Copy
                Sheets.Add
                Range("A1").Select
                ActiveSheet.Paste
                Exit For
            End If
        Next
楼主看看改成这样是否能满足需求吧

TA的精华主题

TA的得分主题

发表于 2020-1-30 18:38 | 显示全部楼层
本帖最后由 shenjianrong163 于 2020-1-30 19:44 编辑

楼主的代码里多次重复,可不可以弄简洁些?

TA的精华主题

TA的得分主题

发表于 2020-1-30 18:54 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-1-30 20:12 | 显示全部楼层
liulang0808 发表于 2020-1-30 18:18
For Each w In Application.Windows
            If InStr(w.Caption, "测试") Then
                w.A ...

谢谢版主。你这样我试过。但是“工作簿1”要查询一次,然后数据要复制到 “测试”里面。也要重新查询一次“测试”窗口。
        For Each w In Application.Windows
            If InStr(w.Caption, "工作簿1") Then   ‘如果这两存在工作簿1. 那么要把下面的执行完。
                w.Activate
                '定位A列最后一个有数据的单元格
                i = Cells(Rows.Count, 1).End(xlUp).Row
                Range(Cells(1, 1), Cells(i, 4)).Copy
                Exit For
                For Each w In Application.Windows  ’到这里就执行不下去了
                    If InStr(w.Caption, "测试") Then
                       w.Activate
                       i = Cells(Rows.Count, 1).End(xlUp).Row + 1
                       Range("a" & i).Select
                       ActiveSheet.Paste
                       Exit For
                     End If
            End If
这是根据你的改的。但不知道行得通不。

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-1-30 20:15 | 显示全部楼层
shenjianrong163 发表于 2020-1-30 18:38
楼主的代码里多次重复,可不可以弄简洁些?

我也想简单。但是只会这么多东西。尴尬!!!!!!!

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-1-30 21:10 | 显示全部楼层
liulang0808 发表于 2020-1-30 18:18
For Each w In Application.Windows
            If InStr(w.Caption, "测试") Then
                w.A ...

谢谢版主版主,但是还要复制“工作簿1” 的数据到“测试”里面。
如果工作簿1 不存在,就查找工作簿2,然后将内容复制到 测试 里。以此类推。

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-1-30 21:13 | 显示全部楼层
小花鹿 发表于 2020-1-30 18:54
推倒重写吧,基本思路就不对

找不到其他办法了啊。知识有限。能帮个忙吗?我表达的应该能看明白。我是个小白,请原谅!

TA的精华主题

TA的得分主题

发表于 2020-1-30 21:29 | 显示全部楼层
看脱了色彩 发表于 2020-1-30 21:10
谢谢版主版主,但是还要复制“工作簿1” 的数据到“测试”里面。
如果工作簿1 不存在,就查找工作簿2, ...

按照楼主的思路,是每个部分都要按照这个要求写
3楼仅仅是针对一段代码

另外建议楼主整体描述下需求,举例说明。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关注官方微信,每天学会一个新技能

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

GMT+8, 2020-5-27 17:29 , Processed in 0.072214 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2020 Wooffice Inc.

   

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

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

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