求助!利用VBA在指定文件夹中打开全部Excel文件并复制指定单元格内容

大家好:我是一个VBA初学者,希望得到高手指导,下面叙述一下我的问题:1、需要将原始测量数据中指定单元格内的数据提取出来,放入分析模板指定单元格内;(原始数据为CSV文件... 大家好:
我是一个VBA初学者,希望得到高手指导,下面叙述一下我的问题:
1、需要将原始测量数据中指定单元格内的数据提取出来,放入分析模板指定单元格内;(原始数据为CSV文件)
2、由于原始数据特别多(40个文件左右),模板也同样有40多个sheet,每个Sheet需要一一对应原始数据每个文件;
下面是我初步编写的语句,只能实现对一个数据进行提取,而且还存在一些问题:
Sub 打开1()
Dim myPath$, myFile$, AK As Workbook
Application.ScreenUpdating = False '冻结屏幕,以防屏幕抖动
myPath = "C:\VBA\data\" '把文件路径定义给变量
myFile = Dir(myPath & "*.csv") '依次找寻指定路径中的*.xls文件
Do While myFile <> "" '当指定路径中有文件时进行循环
If myFile <> ThisWorkbook.Name Then
Set AK = Workbooks.Open(myPath & myFile) '打开符合要求的文件
End If
myFile = Dir '找寻下一个*.xls文件
Loop
Application.ScreenUpdating = True '冻结屏幕,此类语句一般成对使用
Range("E104:E175").Select
ActiveWindow.SmallScroll Down:=-72
Range("E104:E175,M104:M175").Select
Range("M104").Activate
Selection.Copy
Windows("模板.xlsm").Activate 选择模板
Sheets("1").Select
Range("O22").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Dim wb As Object
For Each wb In Workbooks
If wb.Name <> ThisWorkbook.Name Then wb.Close True
Next
End Sub

问题点:1、怎样将多个原始文件按先后顺序打开并提取数据进入模板中每个Sheet?(一个原始文件对应一个sheet,sheet可以提前做出)
2、原始文件打开后,如何只关闭原始数据(我的命令里面,是除处理模板外的所有Excel全部关闭,这是不对的)
以上,请高手请教。
求指教,感激不尽
展开
 我来答
喜欢自作多情
2012-01-17 · TA获得超过614个赞
知道小有建树答主
回答量:408
采纳率:50%
帮助的人:283万
展开全部
原来的程序里查找文件的办法看不明白,改用另一种方法,复制粘贴时的多余操作太多,进行了简化,改好的如下:
Sub 打开1()
Dim myPath$, AK As Workbook, OAK As Workbook
Set fso = CreateObject("Scripting.FileSystemObject")
Set OAK = ActiveWorkbook
myPath = "C:\VBA\data" '把文件路径定义给变量
Application.ScreenUpdating = False '冻结屏幕,以防屏幕抖动
Set FD = fso.GetFolder(myPath)
I = 1
For Each F In FD.Files
If F.Type = "Microsoft Office Excel 逗号分隔值文件" Then
Set AK = Workbooks.Open(F.Path, , True) '打开符合要求的文件
AK.ActiveSheet.Range("E104:E175").Copy OAK.Sheets(I).Range("O22")
AK.ActiveSheet.Range("M104:M175").Copy OAK.Sheets(I).Range("P22")
AK.Close False
I = I + 1
Else
End If
Next
Application.ScreenUpdating = True '冻结屏幕,此类语句一般成对使用
End Sub
更多追问追答
追问
谢谢您的回复,
语句中:AK.ActiveSheet.Range("E104:E175").Copy OAK.Sheets(I).Range("O22")
AK.ActiveSheet.Range("M104:M175").Copy OAK.Sheets(I).Range("P22")
运行时出错!我想要的是,将指定文件夹中的原始数据(大约40左右),按顺序复制其中指定单元格数据,粘贴到模板中sheet(约40个sheet,数据按顺序粘贴进sheet中)
而您给的复制和粘贴,没有模板名称,这样运行可以吗?
PS:模板名称是“模板”
追答
OAK.Sheets(I)中的I是Sheet的序号,如果你的文件数量大于sheet 的数量,就会出错。我不知道你是一开始就出错还是运行到快结束才出错,要不然就是你的Sheet数量本来就不够。
敏锐还宁静丶行家0
2012-01-15 · TA获得超过6870个赞
知道大有可为答主
回答量:3502
采纳率:0%
帮助的人:1761万
展开全部
太复杂,只能给你个建议:
顺序读取sheet表
每读取1个sheet表,在路径下查找对应的文件打开
读取文件,把原始数据拷贝到sheet表
关闭打开的文件(AK.Close set AK = Nothing)
读取下一个sheet表
更多追问追答
追问
您好,感谢回复!
由于原始数据文件名称是随机变化的,所以您的方法没有办法查找对应的文件。
追答
新建Excel表
顺序读取原始数据文件名
每读取1个文件,打开
在excel中添加工作表,把表名称定义为文件名
把原始数据拷贝到新添加的工作表
关闭打开的文件(AK.Close set AK = Nothing)
读取下一个文件名
保存Excel表并关闭
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
baker726
2012-01-14 · 超过10用户采纳过TA的回答
知道答主
回答量:207
采纳率:0%
帮助的人:144万
展开全部
下面的方法可以不显示打开文件的过程,只是在内存中进行访问,速度比直接打开VBA脱离Excel就无法运行。不知道你是在什么情况下取单元格数据? 如果是在
追问
如果可以不打开Excel,就可以取单元格数据,就更理想了!
感谢您的回复!下面再补充说明:
1、需要在指定的文件夹中打开Excel文件(既Raw data),复制指定单元格内的数据,粘贴到模板指定位置;
2、由于原始数据数量较多(大约40个),需要按时间顺序一一打开,并一一重复1里面的操作;
说明:Raw data 有40个(每次数量不定,最多40),模板可以制作40个sheet与其对应。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式