Excel精英培训网

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

[已解决]如何循环调用指定的工作表?

[复制链接]
发表于 2012-2-16 21:04 | 显示全部楼层 |阅读模式
本帖最后由 香满园 于 2012-2-16 21:53 编辑

如何通过以下定义的三个红色字体的工作表标签,在下面代码的括号中依次调用?(Sheets(工作表标签名1))比如第一次循环调用工作表标签名1,第二次循环调用工作表标签名2,第三次循环工作表标签名3.这样就完成了指定的工作表调用的功能,怎么才能实现呢?
sub test()
dim i as integer
dim 工作表标签名1 as string,工作表标签名2 as string,工作表标签名3 as string
工作表标签名1="Sheet1"
工作表标签名2="Sheet5"
工作表标签名3="表3"


i = Sheets(工作表标签名1).Cells(Rows.Count, 1).End(xlUp).Row
arr = Workbooks(表1.xls").Sheets(biaoqian).Range("A3").Resize(i - 2, 4)
for j=1 to 10
.........
next

Workbooks.Open  ThisWorkbook.Path & "\表2.xls"
With Workbooks(表2.xls").Sheets(工作表标签名1)
.........
end with
ActiveWorkbook.Close True

end sub
最佳答案
2012-2-16 22:44
  1. Sub yidata()
  2.     Dim i, arr, j As Integer, d As Object, wb, Arr2()
  3.     i = Cells(Rows.Count, 1).End(xlUp).Row
  4.     arr = Range("A2").Resize(i - 1, 2)
  5.     Set d = CreateObject("scripting.dictionary")
  6.     For j = 1 To UBound(arr)
  7.         d(arr(j, 1)) = arr(j, 2)
  8.     Next
  9.    
  10.     Application.ScreenUpdating = False
  11.     Workbooks.Open ThisWorkbook.Path & "\表2.xls", Password:="123"
  12.     Arr2 = [{"Sheet1","Sheet5","表3"}]
  13.     For i = 1 To UBound(Arr2)
  14.         With Sheets(Arr2(i))
  15.             .[A2].Resize(d.Count) = Application.WorksheetFunction.Transpose(d.keys)
  16.             .[B2].Resize(d.Count) = Application.WorksheetFunction.Transpose(d.items)
  17.         End With
  18.     Next i
  19.     Application.DisplayAlerts = False
  20.     ActiveWorkbook.Close True
  21.     Application.ScreenUpdating = True
  22. End Sub
复制代码

这样吗

如何循环调用指定的工作表.rar

9.53 KB, 下载次数: 66

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2012-2-16 21:16 | 显示全部楼层
建议最好先上传附件,这样有利于理解、回复和测试,也利于问题早些解决。
回复

使用道具 举报

 楼主| 发表于 2012-2-16 21:57 | 显示全部楼层
本帖最后由 香满园 于 2012-2-16 21:57 编辑
爱疯 发表于 2012-2-16 21:16
建议最好先上传附件,这样有利于理解、回复和测试,也利于问题早些解决。


请爱疯看看,附件已上传,我举的例子关键是想在两张工作簿中做个循环,把表1工作表中指定的一些工作表内容,循环的加到表2工作表指定表中去。我在工作表标签上循环不了,在这个上应该怎么设置才能进行循环调用工作表呢?
回复

使用道具 举报

 楼主| 发表于 2012-2-16 22:00 | 显示全部楼层
想到用INPUTBOX吧,每次循环到时,还要进行输入工作表标签的名称,也挺麻烦的,不知道怎么解决?请大家帮忙,谢谢了!!
回复

使用道具 举报

发表于 2012-2-16 22:44 | 显示全部楼层    本楼为最佳答案   
  1. Sub yidata()
  2.     Dim i, arr, j As Integer, d As Object, wb, Arr2()
  3.     i = Cells(Rows.Count, 1).End(xlUp).Row
  4.     arr = Range("A2").Resize(i - 1, 2)
  5.     Set d = CreateObject("scripting.dictionary")
  6.     For j = 1 To UBound(arr)
  7.         d(arr(j, 1)) = arr(j, 2)
  8.     Next
  9.    
  10.     Application.ScreenUpdating = False
  11.     Workbooks.Open ThisWorkbook.Path & "\表2.xls", Password:="123"
  12.     Arr2 = [{"Sheet1","Sheet5","表3"}]
  13.     For i = 1 To UBound(Arr2)
  14.         With Sheets(Arr2(i))
  15.             .[A2].Resize(d.Count) = Application.WorksheetFunction.Transpose(d.keys)
  16.             .[B2].Resize(d.Count) = Application.WorksheetFunction.Transpose(d.items)
  17.         End With
  18.     Next i
  19.     Application.DisplayAlerts = False
  20.     ActiveWorkbook.Close True
  21.     Application.ScreenUpdating = True
  22. End Sub
复制代码

这样吗
回复

使用道具 举报

 楼主| 发表于 2012-2-16 23:28 | 显示全部楼层
爱疯 发表于 2012-2-16 22:44
这样吗

谢谢!问题解决!!!!
回复

使用道具 举报

 楼主| 发表于 2012-2-16 23:30 | 显示全部楼层
爱疯 发表于 2012-2-16 22:44
这样吗

用数组就能完成工作表中的循环调用,如果不用数组还有别的写法吗?比如:标签& i 这个应该怎么改,才能不出错!!
回复

使用道具 举报

发表于 2012-2-16 23:33 | 显示全部楼层
也可以。正如你所说,不过要确保名字部分相同,只是数字不同。不过总的感觉不如数组方便。
回复

使用道具 举报

发表于 2012-8-28 17:11 | 显示全部楼层
爱疯 发表于 2012-2-16 22:44
这样吗

爱疯老师:下面这句代码是什么意思?有别的表示方法吗?
Arr2 = [{"Sheet1","Sheet5","表3"}]

回复

使用道具 举报

发表于 2012-8-28 17:22 | 显示全部楼层
w2001pf 发表于 2012-8-28 17:11
爱疯老师:下面这句代码是什么意思?有别的表示方法吗?
Arr2 = [{"Sheet1","Sheet5","表3"}]
  1. Sub a()
  2.     Dim arr
  3.     arr = [{"a","b","c"}]
  4. End Sub
复制代码
少量数据时,方便赋值给数组arr
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 15:44 , Processed in 0.455904 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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