VBA遍历当前目录下指定类型的excel文件并复制文件内指定的内容到新表中
2017-06-22 17:07
956 查看
最近在做水质分析数据录入的时候,需要根据监测井编号到多个excel表中查询该编号对应的井的水质分析数据,并将单口井的水质分析数据复制到新表中。由于检测中心给的
水质分析数据很多,而且还分布在不同的工作薄中,一个个得查询再复制不仅工作量巨大、而且容易出错。因此编写了以下代码,让这部分工作实现自动化。
这部分内容涉及的知识点有:多工作薄交叉复制、获取某一目录下所有excel工作薄、获取某一目录下所有指定类型excel工作薄、创建工作薄、打开工作薄并操作
现在把代码整理贴出来,方便以后参考调用。
Option Explicit
Sub test()
Dim dict, i, v
Set dict = CreateObject("Scripting.Dictionary") '创建dictionary
i = 1
Do While Cells(i, 1) <> "" '遍历当前excel文件第一列内容,直到第一列单元格值为空
dict.Add i, Cells(i, 1).Text '将第一列单元格的值添加到dict中
i = i + 1
Loop
Create_New_Workbook
v = dict.Items
For i = 0 To dict.Count - 1
HuiZong (v(i))
Next i
End Sub
Function HuiZong(WellId As String)
Dim myfile, mypath, wb '声明变量
Application.ScreenUpdating = False '关闭屏幕更新
mypath = ThisWorkbook.Path '找到当前工作簿的路径
myfile = Dir(mypath & "\*.xls*") '遍历当前文件夹下的Excel文件
Do While myfile <> "" '当找到的文件不为空时
If myfile Like "W*" Then '当找到的文件为指定类型的excel工作薄时
Set wb = GetObject(mypath & "\" & myfile) '得到dir找到的工作簿的内容,设为wb
With wb.Worksheets("报告数据") '对找到的工作簿的“报告数据”进行操作
Dim j As Integer
j = 1
Do While True
If .Cells(j, 4) = "" And .Cells(j + 1, 4) = "" Then
Exit Do
End If
If .Cells(j, 4) = WellId Then '找到指定内容,进行后续操作
Dim aa '复制到新的工作薄内,恢复屏幕更新并退出函数
aa = My_Copy(j, myfile, WellId)
Application.ScreenUpdating = True
Exit Function
End If
j = j + 1
Loop
End With
wb.Close False '关闭wb工作簿且不保存
End If
myfile = Dir '寻找下一个Excel工作簿
Loop
MsgBox (WellId + "的数据未找到!")
Application.ScreenUpdating = True '恢复屏幕更新
End Function
Function My_Copy(j As Integer, f As Variant, t As Variant)
'将f工作薄中r(j)—>r(j+35)行的数据复制到t工作薄内
Dim mypath, myfile, wb, wb1, i, k, p
mypath = ThisWorkbook.Path
myfile = mypath & "\" & f
Set wb = GetObject(myfile)
Set wb1 =
97f1
GetObject(mypath & "\" & t & ".xls")
For i = 1 To 8
p = j - 1
For k = 1 To 35
wb1.Worksheets(1).Cells(k, i) = wb.Worksheets("报告数据").Cells(p, i)
p = p + 1
Next k
Next i
wb1.Save
wb1.Close
End Function
Function Create_New_Workbook() '新建工作薄
Application.ScreenUpdating = False
Dim gzb As Workbook
Dim mypath, i, wb
mypath = ThisWorkbook.Path '获取当前工作薄所在的路径
Set wb = GetObject(mypath & "\" & "date.xls") '设置wb为当前目录下的date.xls工作薄
i = 1
Do While Cells(i, 1) <> ""
Set gzb = Workbooks.Add
gzb.SaveAs mypath & "\" & wb.Worksheets(1).Cells(i, 1).Text & ".xls" '保存工作薄的名字为Cells(i,1)中的字符
gzb.Close
i = i + 1
Loop
Application.ScreenUpdating = True
End Function
水质分析数据很多,而且还分布在不同的工作薄中,一个个得查询再复制不仅工作量巨大、而且容易出错。因此编写了以下代码,让这部分工作实现自动化。
这部分内容涉及的知识点有:多工作薄交叉复制、获取某一目录下所有excel工作薄、获取某一目录下所有指定类型excel工作薄、创建工作薄、打开工作薄并操作
现在把代码整理贴出来,方便以后参考调用。
Option Explicit
Sub test()
Dim dict, i, v
Set dict = CreateObject("Scripting.Dictionary") '创建dictionary
i = 1
Do While Cells(i, 1) <> "" '遍历当前excel文件第一列内容,直到第一列单元格值为空
dict.Add i, Cells(i, 1).Text '将第一列单元格的值添加到dict中
i = i + 1
Loop
Create_New_Workbook
v = dict.Items
For i = 0 To dict.Count - 1
HuiZong (v(i))
Next i
End Sub
Function HuiZong(WellId As String)
Dim myfile, mypath, wb '声明变量
Application.ScreenUpdating = False '关闭屏幕更新
mypath = ThisWorkbook.Path '找到当前工作簿的路径
myfile = Dir(mypath & "\*.xls*") '遍历当前文件夹下的Excel文件
Do While myfile <> "" '当找到的文件不为空时
If myfile Like "W*" Then '当找到的文件为指定类型的excel工作薄时
Set wb = GetObject(mypath & "\" & myfile) '得到dir找到的工作簿的内容,设为wb
With wb.Worksheets("报告数据") '对找到的工作簿的“报告数据”进行操作
Dim j As Integer
j = 1
Do While True
If .Cells(j, 4) = "" And .Cells(j + 1, 4) = "" Then
Exit Do
End If
If .Cells(j, 4) = WellId Then '找到指定内容,进行后续操作
Dim aa '复制到新的工作薄内,恢复屏幕更新并退出函数
aa = My_Copy(j, myfile, WellId)
Application.ScreenUpdating = True
Exit Function
End If
j = j + 1
Loop
End With
wb.Close False '关闭wb工作簿且不保存
End If
myfile = Dir '寻找下一个Excel工作簿
Loop
MsgBox (WellId + "的数据未找到!")
Application.ScreenUpdating = True '恢复屏幕更新
End Function
Function My_Copy(j As Integer, f As Variant, t As Variant)
'将f工作薄中r(j)—>r(j+35)行的数据复制到t工作薄内
Dim mypath, myfile, wb, wb1, i, k, p
mypath = ThisWorkbook.Path
myfile = mypath & "\" & f
Set wb = GetObject(myfile)
Set wb1 =
97f1
GetObject(mypath & "\" & t & ".xls")
For i = 1 To 8
p = j - 1
For k = 1 To 35
wb1.Worksheets(1).Cells(k, i) = wb.Worksheets("报告数据").Cells(p, i)
p = p + 1
Next k
Next i
wb1.Save
wb1.Close
End Function
Function Create_New_Workbook() '新建工作薄
Application.ScreenUpdating = False
Dim gzb As Workbook
Dim mypath, i, wb
mypath = ThisWorkbook.Path '获取当前工作薄所在的路径
Set wb = GetObject(mypath & "\" & "date.xls") '设置wb为当前目录下的date.xls工作薄
i = 1
Do While Cells(i, 1) <> ""
Set gzb = Workbooks.Add
gzb.SaveAs mypath & "\" & wb.Worksheets(1).Cells(i, 1).Text & ".xls" '保存工作薄的名字为Cells(i,1)中的字符
gzb.Close
i = i + 1
Loop
Application.ScreenUpdating = True
End Function
相关文章推荐
- 在当前目录中所有文件中,查找,存在指定内容的指定文件类型
- MFC 遍历目录下指定类型的文件并复制
- python 学习记录(11)-文件处理/读取文件/文件写入内容/文件删除/文件复制/文件重命名/后缀名/内容查找与替换/文件比较/ 配置文件访问/目录创建与删除/遍历目录/定向输出
- 启动shell的调试模式 set -x ,find 当前目录下的指定类型文件
- python 遍历目录,复制指定文件
- 非递归遍历目录和文件,生成指定文件类型的索引
- bat 将当前目录的文件复制到指定目录
- 目录下指定类型的文件复制到另外一个目录
- 从文件夹目录下导入所有指定文件类型的数据内容到数据库表
- 使用python读取指定目录下的源代码并将内容复制到同一新文件中
- [原创]VBA实现汇总excel,将多个Excel文件内容复制到一个Excel文件中
- Python_删除/创建指定目录及其下所有子目录的文件,该文件记录当前文件夹的内容
- Delphi两个遍历指定目录下指定类型文件的函数
- 在当前目录下查找查找包含指定内容的文件
- 遍历指定目录下指定类型文件的方法集锦
- DOS工具: 当前目录文件重命名并找到最新的复制到指定目录
- Python_删除/创建指定目录及其下所有子目录的文件,该文件记录当前文件夹的内容
- 多平台遍历目录和子目录中指定类型文件,并对每个文件执行命令
- delphi遍历指定目录下指定类型文件的函数
- MFC 目录选取,指定类型文件查找复制