Excel精英培训网

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

[已解决]如何修改成可移动路径,谢谢

[复制链接]
发表于 2013-6-21 21:58 | 显示全部楼层 |阅读模式
跨工作簿逻辑性搜索.zip (760 Bytes, 下载次数: 7)
发表于 2013-6-21 22:14 | 显示全部楼层    本楼为最佳答案   
直接通过对话框选择路径。
  1. Sub 查找()
  2.     Application.ScreenUpdating = False    '禁止刷屏
  3.     Application.DisplayAlerts = False    '禁止弹出对话框
  4.     Range("c4:e" & [c65536].End(3).Row + 10).ClearContents    '清空要写入数据的区域

  5.     With Application.FileDialog(msoFileDialogFolderPicker)
  6.         .AllowMultiSelect = False
  7.         If .Show = -1 Then
  8.             mp = .SelectedItems(1) & Application.PathSeparator
  9.         Else
  10.             MsgBox "没有选择要查找的文件夹,退出"
  11.             Exit Sub
  12.         End If
  13.     End With
  14.     mf = Dir(mp & "粘焊车间(数据模板).xls")    '文件
  15.     Set dk = Workbooks.Open(mp & mf)    '打开粘焊车间(数据模板).xls
  16.     '把打开的文件有数据区域写入数组(是动态的,可以随意添加行)
  17.     arr1 = dk.Sheets(1).Range("a2:e" & dk.Sheets(1).[b65536].End(3).Row)
  18.     '把粘焊文件有数据区域写入数组(是动态的,可以随意添加行)
  19.     arr2 = ThisWorkbook.Sheets(1).Range("a4:b" & ThisWorkbook.Sheets(1).[b65536].End(3).Row)
  20.     For i = 1 To UBound(arr2)    '在数组arr1的下限与上限之间循环
  21.         For j = 1 To UBound(arr1)    '在数组arr2的下限与上限之间循环
  22.             If arr1(j, 2) = arr2(i, 2) Then    '如果流程票号相等
  23.                 Cells(i + 3, 3) = arr1(j, 3): Cells(i + 3, 4) = arr1(j, 4): Cells(i + 3, 5) = arr1(j, 5)    '写入相应数据
  24.             End If
  25.         Next
  26.     Next
  27.     dk.Close True    '关闭文件
  28.     Application.ScreenUpdating = True    '允许刷屏
  29.     Application.DisplayAlerts = True    '允许弹出对话框
  30. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2013-6-21 22:27 | 显示全部楼层
hwc2ycy 发表于 2013-6-21 22:14
直接通过对话框选择路径。

能不能改成不要每次都需要选择在哪里呢
回复

使用道具 举报

发表于 2013-6-21 22:38 | 显示全部楼层
可以把获得的路径存工作表里,然后每次检测,如果是空值就再让选择。
回复

使用道具 举报

 楼主| 发表于 2013-6-21 22:45 | 显示全部楼层
hwc2ycy 发表于 2013-6-21 22:38
可以把获得的路径存工作表里,然后每次检测,如果是空值就再让选择。

不明白
回复

使用道具 举报

 楼主| 发表于 2013-6-21 22:52 | 显示全部楼层
hwc2ycy 发表于 2013-6-21 22:38
可以把获得的路径存工作表里,然后每次检测,如果是空值就再让选择。

顺便帮我把另外两个车间也设一下好吗?我实在是看不懂,好好学习,谢谢 2013年7月份数据模板.zip (417.89 KB, 下载次数: 1)
回复

使用道具 举报

发表于 2013-6-22 07:57 | 显示全部楼层
  1.     Application.ScreenUpdating = False    '禁止刷屏
  2.     Application.DisplayAlerts = False    '禁止弹出对话框
  3.     Range("c4:e" & [c65536].End(3).Row + 10).ClearContents    '清空要写入数据的区域

  4.     If Len(Cells(Rows.Count, 1)) = 0 Then

  5.         With Application.FileDialog(msoFileDialogFolderPicker)
  6.             .AllowMultiSelect = False
  7.             If .Show = -1 Then
  8.                 mp = .SelectedItems(1) & Application.PathSeparator
  9.                 Cells(Rows.Count, 1).Value = mp
  10.             Else
  11.                 MsgBox "没有选择要查找的文件夹,退出"
  12.                 Exit Sub
  13.             End If
  14.         End With
  15.     Else
  16.         mp = Cells(Rows.Count, Columns.Count).Value
  17.     End If

  18.     mf = Dir(mp & "粘焊车间(数据模板).xls")    '文件
  19.     Set dk = Workbooks.Open(mp & mf)    '打开粘焊车间(数据模板).xls
  20.     '把打开的文件有数据区域写入数组(是动态的,可以随意添加行)
  21.     arr1 = dk.Sheets(1).Range("a2:e" & dk.Sheets(1).[b65536].End(3).Row)
  22.     '把粘焊文件有数据区域写入数组(是动态的,可以随意添加行)
  23.     arr2 = ThisWorkbook.Sheets(1).Range("a4:b" & ThisWorkbook.Sheets(1).[b65536].End(3).Row)
  24.     For i = 1 To UBound(arr2)    '在数组arr1的下限与上限之间循环
  25.         For j = 1 To UBound(arr1)    '在数组arr2的下限与上限之间循环
  26.             If arr1(j, 2) = arr2(i, 2) Then    '如果流程票号相等
  27.                 Cells(i + 3, 3) = arr1(j, 3): Cells(i + 3, 4) = arr1(j, 4): Cells(i + 3, 5) = arr1(j, 5)    '写入相应数据
  28.             End If
  29.         Next
  30.     Next
  31.     dk.Close True    '关闭文件
  32.     Application.ScreenUpdating = True    '允许刷屏
  33.     Application.DisplayAlerts = True    '允许弹出对话框
  34. End Sub
复制代码
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-23 23:18 , Processed in 0.365519 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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