楼主: gaotao0727
18916 9

[问答] VBA关闭指定工作簿的小问题 [推广有奖]

  • 1关注
  • 10粉丝

副教授

79%

还不是VIP/贵宾

-

威望
0
论坛币
540 个
通用积分
11.2790
学术水平
18 点
热心指数
18 点
信用等级
12 点
经验
27715 点
帖子
873
精华
0
在线时间
855 小时
注册时间
2011-8-8
最后登录
2023-3-1

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
刚接触Excel2007 VBA 不长时间,碰到一个小问题,下面是关闭指定工作簿子过程:

Sub 关闭指定工作簿()
Dim filename As String
filename = Sheets("Sheet3").Range("B1").value
Workbooks(filename).Close
End Sub

把变量filename作为参数来关闭指定的工作簿,运行时出错,提示“下标越界”,这是为什么呢?哪位大侠给小弟指点一下~~

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:VBA 工作簿 小问题 Workbooks excel2007 工作 面试

回帖推荐

0Mouse 发表于7楼  查看完整内容

如果表3的B1单元格内放置的是完整路径,那在代码中添加提取路径中的工作簿名称的语句即可,代码如下: 附件:

0Mouse 发表于6楼  查看完整内容

出错恰恰是因为用了完整路径,Excel关闭打开的工作簿的代码是: Workbooks(工作簿名称).Close True/False 代码中()内是工作簿“名称”,不是“完整路径”。 所以在表3的B1单元格内放置工作簿名称“人员信息更新表.xlsx”即可,相应的代码如下: 附件:

本帖被以下文库推荐

衣带渐宽终不悔,为伊消得人憔悴~~
沙发
willl 发表于 2012-2-1 09:49:08 |只看作者 |坛友微信交流群
看一下 filename 取到的是不是完整的文件名,要包括后缀。或者再加进文件路径试试看

使用道具

藤椅
gaotao0727 发表于 2012-2-1 10:51:01 |只看作者 |坛友微信交流群
是完整的路径呀,E:\Company\人员信息更新表.xlsx,不行
衣带渐宽终不悔,为伊消得人憔悴~~

使用道具

板凳
gaotao0727 发表于 2012-2-1 10:51:24 |只看作者 |坛友微信交流群
willl 发表于 2012-2-1 09:49
看一下 filename 取到的是不是完整的文件名,要包括后缀。或者再加进文件路径试试看
是完整的路径呀,E:\Company\人员信息更新表.xlsx,不行
衣带渐宽终不悔,为伊消得人憔悴~~

使用道具

报纸
willl 发表于 2012-2-2 09:51:31 |只看作者 |坛友微信交流群
最好发个附件,大家好研究研究,呵呵

使用道具

地板
0Mouse 发表于 2012-2-2 14:34:22 |只看作者 |坛友微信交流群
gaotao0727 发表于 2012-2-1 10:51
是完整的路径呀,E:\Company\人员信息更新表.xlsx,不行
出错恰恰是因为用了完整路径,Excel关闭打开的工作簿的代码是:
Workbooks(工作簿名称).Close True/False
代码中()内是工作簿“名称”,不是“完整路径”。
所以在表3的B1单元格内放置工作簿名称“人员信息更新表.xlsx”即可,相应的代码如下:
  1. Sub 关闭指定工作簿1()
  2. Dim filename As String
  3. filename = Sheets("Sheet3").Range("B1").Value
  4. Workbooks(filename).Close True
  5. End Sub
复制代码
附件: closewb1.rar (5.91 KB) 本附件包括:
  • closewb1.xls

已有 1 人评分经验 论坛币 热心指数 收起 理由
客初 + 20 + 20 + 2 热心帮助其他会员

总评分: 经验 + 20  论坛币 + 20  热心指数 + 2   查看全部评分

使用道具

7
0Mouse 发表于 2012-2-2 14:39:24 |只看作者 |坛友微信交流群
gaotao0727 发表于 2012-2-1 10:51
是完整的路径呀,E:\Company\人员信息更新表.xlsx,不行
如果表3的B1单元格内放置的是完整路径,那在代码中添加提取路径中的工作簿名称的语句即可,代码如下:
  1. Sub 关闭指定工作簿2()
  2. Dim filename As String
  3. Dim i As Integer, j As Integer
  4. filename = Sheets("Sheet3").Range("B1").Value
  5. For i = 1 To Len(filename)
  6.     If Mid(filename, i, 1) = "\" Then
  7.         j = i + 1
  8.     End If
  9. Next
  10. Workbooks(Mid(filename, j, Len(filename))).Close True
  11. End Sub
复制代码
附件: closewb2.rar (5.34 KB) 本附件包括:
  • closewb2.xls

已有 1 人评分经验 论坛币 热心指数 收起 理由
客初 + 20 + 20 + 2 热心帮助其他会员

总评分: 经验 + 20  论坛币 + 20  热心指数 + 2   查看全部评分

使用道具

8
gaotao0727 发表于 2012-2-2 17:46:49 |只看作者 |坛友微信交流群
0Mouse 发表于 2012-2-2 14:34
出错恰恰是因为用了完整路径,Excel关闭打开的工作簿的代码是:
Workbooks(工作簿名称).Close True/Fals ...
哦!原来如此!!非常感谢~~
衣带渐宽终不悔,为伊消得人憔悴~~

使用道具

9
XX_CMH 发表于 2013-9-22 04:15:49 |只看作者 |坛友微信交流群
唉,真好,为什么笨呢子

使用道具

10
matlab-007 发表于 2016-6-18 10:34:55 |只看作者 |坛友微信交流群
可以把数组的大小定义的大一点,在使用数组里的元素的时候,别让它的小标超过规定值!

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-11 19:51