网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
08月03日漏签0天
excel吧 关注:281,443贴子:1,550,632
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 1 2 3 下一页 尾页
  • 32回复贴,共3页
  • ,跳到 页  
<<返回excel吧
>0< 加载中...

请教各位大哥,以下代码如何达成,百思不得其解,谢谢各位

  • 只看楼主
  • 收藏

  • 回复
  • excel188
  • 博采众E
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
说明:
一、当前工作薄名为:C:\XL01.XLS
工作薄内有二个sheet.name:
1> sheet1(DAK-0A0023)
注:DAK-0A0023为变量,由其它程序生成;
2>sheet2(总表)
二、定位查找范围的路径为:D:\001
其下目录树为:
D:\001
├—1210
│   ├—DAK-0A0028(11)
│   │       bom12.xls
│   │
│   ├—DAK-0A0029
│   │       bom1.xls
│   │
│   └—DAK-0A0030 1025
│           bom1.xls
│
├—1211
│   └—DAK-0A0023 (9)
│       └—news
│               bom1.xls
│
├—1213
│   └—DAK-0A0024 10
│           bom(2)1.xls
│
└—1214
     ├—DAK-0A0041
     │       bom1.xls
     │
     ├—DAK-0A0043客供
     │       bom1.xls
     │
     └—DAK-0A003512
         └—old
                 bom1.xls



  • excel188
  • 博采众E
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
继续补充问题:
想实现一种效果:
1>在当前工作薄(C:\XL01.XLS)中的sheet1(DAK-0A0023)中的自定义名称“DAK-0A0023”;
1.1 在D:\001目录下有无包含“DAK-0A0023”名称的资料夹;
1.2 如果有:打开相对应的资料夹,且打开对应资料夹内的.XLS文件,并且复制里面的.xls文件中的sheets("文字")到当前工作薄(C:\XL01.XLS)里面;
     如果无:退出
说明:1.2对应的资料夹内有且只有一个*.xls;且有可能在对应文件夹内一级或二级子目录内



2025-08-03 02:59:08
广告
不感兴趣
开通SVIP免广告
  • excel188
  • 博采众E
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
再说明:1.2对应的资料夹内的*.xls只是文件名不符,内建结构完全相同,数据不相同。


  • excel188
  • 博采众E
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
回复:4楼
呀老师来了
我就是想几句话:
怎么样才能把C:\XL01.XLS里的一个名叫DAK-0A0023从我需要的目录D:\001下找出来
,并且把里面含的Excel表里的sheets("文字"),整个复制到我这个C:\XL01.XLS表中。


  • siaojuen
  • 以E待劳
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
千思不得其解。
是这样吗?
从 D:\001 往下搜索子文件夹,孙文件夹,曾孙文件夹......。
如果找到名为 "DAK-0A0023" 的文件夹,就将其下的 xls 文件的
sheets("文字")抄入 C:\XL01.XLS 。
反问题来了:
会否有超过一个名为 "DAK-0A0023" 的文件夹?
如果找到这个文件夹,有没有指定其下那个 xls 文件?
如果找到,抄入C:\XL01.XLS 那个工作表?



  • excel188
  • 博采众E
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
回复:6楼
从   D:\001   往下搜索子文件夹,孙文件夹,曾孙文件夹......。
如果找到名为 "DAK-0A0023" 的文件夹,就将其下的 xls 文件的
sheets("文字")抄入 C:\XL01.XLS
=>>是的:补充一下,是包含有"DAK-0A0023"字符的文件夹;
会否有超过一个名为 "DAK-0A0023" 的文件夹?=>>不会
如果找到这个文件夹,有没有指定其下那个 xls 文件?=>没有指定,其下面或其下的子目录中,有且只有一个EXCEL文件;
如果找到,抄入C:\XL01.XLS 那个工作表?=>不是抄入,是将找到的excel文件中的固定的一个名字叫“文字”的sheet整个移动复制到C:\XL01.XLS文件内,使其变成三个sheet。
再说明:D:\001   对应的资料夹内的*.xls只是文件名不符,表单内建结构完全相同,只是数据不相同


  • siaojuen
  • 以E待劳
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
初时本题目没说完整的地方很多,要答问题得先反问问题,我本想临阵退缩,无奈让你递著了,欲罢不能。
树状目录容易错漏, 程式采用递回函数,能历遍所有子文件夹。  
执行 sub main() ,不可以直接执行 Sub 子文件夹及文件()。  
执行 sub main() 前,确保 D:\001 以下文件全部关闭。
还是不太清楚问题,先写出这个,你用复制本试行看看,有问题再修改。
~~~~
Sub main()
子文件夹及文件 "D:\001", False
End Sub
Sub 子文件夹及文件(path As String, v As Boolean)
Application.ScreenUpdating = False
On Error Resume Next
Dim verified As Boolean
verified = v
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
If path Like "*\DAK-0A0023" Then
   verified = True
End If
If verified Then
   Set aFiles = FSO.GetFolder(path).Files
   For Each f In aFiles
       Set wb = Workbooks.Open(f)
       Sheets("文字").Copy Before:=ThisWorkbook.Sheets(1)
       wb.Close
   Next
End If
Set aFolders = FSO.GetFolder(path).SubFolders
For Each p In aFolders
    子文件夹及文件 p.path, verified
Next
On Error GoTo 0
Application.ScreenUpdating = True
End Sub
  



  • siaojuen
  • 以E待劳
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
将 vba 抄入 C:\XL01.XLS 模块 (Module) ,
执行 sub main()


2025-08-03 02:53:08
广告
不感兴趣
开通SVIP免广告
  • 大圣美猴王
  • 博采众E
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
     With Application.FileSearch
         .NewSearch
         .LookIn = "D:\001"
         .SearchSubFolders = True
         .Filename = "*.xls"
         If .Execute() > 0 Then
             For i = 1 To .FoundFiles.Count
                 你想做的事
             Next i
         End If
end with


  • siaojuen
  • 以E待劳
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
8楼vba有点累赘,小改如下:
Sub main()
子文件夹及文件 "D:\001"
End Sub
Sub 子文件夹及文件(path As String)
Application.ScreenUpdating = False
On Error Resume Next
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
Set aFiles = FSO.GetFolder(path).Files
For Each f In aFiles
   If f Like "*\DAK-0A0023\*.xls" Then
       Set wb = Workbooks.Open(f)
       Sheets("文字").Copy Before:=ThisWorkbook.Sheets(1)
       wb.Close
   End If
Next
Set aFolders = FSO.GetFolder(path).SubFolders
For Each p In aFolders
    子文件夹及文件 p.path
Next
On Error GoTo 0
Application.ScreenUpdating = True
End Sub
~~~
将 vba 抄入 C:\XL01.XLS 模块 (Module) ,
执行 sub main() ,不可以直接执行 Sub 子文件夹及文件()。
执行 sub main() 前,确保 D:\001 以下文件全部关闭。



  • excel188
  • 博采众E
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
回复:10楼
谢谢回复:
SearchSubFolders好像不能查到子目录下的。。


  • excel188
  • 博采众E
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
回复:11楼
siaojuen老师:
FSO?
If f Like "*\DAK-0A0023\*.xls" Then
说明一点:DAK-0A0023为变量,由其它程序生成的,这里有局限性,程序我正在试,等下通知你结果,谢谢


  • siaojuen
  • 以E待劳
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
DAK-0A0023为变量,你要说明从那里可取得这变量。
10楼程式也是可行的,你先完善你的题目说明,然后再请10老师给你完整程式。


  • excel188
  • 博采众E
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
回复:11楼
siaojuen老师:
我试了一下,连着循环到五六层子目录,可是没有反映,是何原因?
这一段没执行过:
Set aFiles = FSO.GetFolder(path).Files
For Each F In aFiles
    If F Like "*\DAK-0A0023\*.xls" Then
    'MsgBox F 我在这里加了个显示,也没有结果
        Set wb = Workbooks.Open(F)
        Sheets("文字").Copy Before:=ThisWorkbook.Sheets(1)
        wb.Close


2025-08-03 02:47:08
广告
不感兴趣
开通SVIP免广告
  • siaojuen
  • 以E待劳
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
哈哈,文件在你那边,我怎麼知道是何原因?
你的文件尾是 .xlsx 吗?
这样试试看
For Each F In aFiles
    MsgBox F '在这里加个显示看看
    If F Like "*\DAK-0A0023\*.xls" Then
        Set wb = Workbooks.Open(F)
        Sheets("文字").Copy Before:=ThisWorkbook.Sheets(1)
        wb.Close


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 1 2 3 下一页 尾页
  • 32回复贴,共3页
  • ,跳到 页  
<<返回excel吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示