ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 549|回复: 9

[求助] 求赐教:批量建立文件夹中出现编译问题。

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-3-12 12:47 | 显示全部楼层 |阅读模式
想根据相关信息批量建立文件夹。具体情况是:
附件的表格的D1:EA2区域中的信息建立文件夹,效果如附件中的文件夹。
其中第一行为学生的班号:以"D1"81011为例,说一下其包括的信息:
(1)开头两位数81是班级,即“八(一)班”
(2)中间两位数01,是组别,即“一组”。
(3)最后一位数1,是组内编号,1是一组的组长。
那么对应的D2是程寅,即程寅为八(一)班一组,是组长。
于是根据D1:D2的信息建立文件夹:八年级课文词语\81班\1组【组长程寅】
如法炮制,建立81、82 两个班的所有文件夹。
当然我还通过,一个窗体,可以三种选择:
(1)选择81,只建立81班的所文件夹
(2)选择82,只建立82班的所文件夹
(3)点选窗体中的复选框,选择全部,则实现两个班同时制作目录。
问题:出现编译错误,请大侠一看。
代码如下:
Sub 批量建立文件夹()
On Error Resume Next
Dim par As Paragraph, arr(), bln As Boolean, bln1 As Boolean, bln2 As Boolean
bln = False: bln1 = False: bln2 = False
Cbotx = UserForm2.ComboBox1.Text
rw = ActiveSheet.Range("C65536").End(3).Row
ph = ThisWorkbook.Path
fnm = ActiveSheet.Name
filpth = ph & "\" & fnm & "\"
MkDir filpth
Set d = CreateObject("scripting.dictionary")
Set D1 = CreateObject("scripting.dictionary")
Set d2 = CreateObject("scripting.dictionary")
Set d3 = CreateObject("scripting.dictionary")
Set d4 = CreateObject("scripting.dictionary")
With ActiveSheet
     For m = 4 To 131
       If Cbotx <> "" Then
          If Left(.Cells(1, m).Text, 2) = Cbotx Then
             If Val(Right(.Cells(1, m).Text, 1)) = 1 Then d(Val(Mid(.Cells(1, m).Text, 3, 2))) = .Cells(2, m).Text
             D1(.Cells(2, m).Text) = Val(Mid(.Cells(1, m).Text, 3, 2))
          End If
       Else
          d2(Left(.Cells(1, m).Text, 2)) = ""
          bln1 = True
       End If
     Next
       If bln1 = False Then
          k = d.keys: T = d.Items: CT = d.Count - 1
          Ke1 = D1.keys: Te1 = D1.Items: Cn1 = D1.Count - 1
             If MsgBox("是否建立小组文件夹,若建立选“是”。", vbYesNo, Space(22) & "温馨提示") = vbYes Then
                For ky = 0 To CT
                    If Dir(filpth & Cbotx & "班\" & k(ky) & "组【组长" & T(ky) & "】\") = "" Then MkDir filpth & Cbotx & "班\" & k(ky) & "组【组长" & T(ky) & "】\"
                Next
                bln = True
             Else
                    If Dir(filpth & Cbotx & "班\") = "" Then MkDir filpth & Cbotx & "班\"
             End If
       Else
          ke2 = d2.keys:  Cn2 = d2.Count - 1
             If MsgBox("是否建立小组文件夹,若建立选“是”。", vbYesNo, Space(22) & "温馨提示") = vbYes Then bln2 = True
             For ky1 = 0 To Cn2
                For jj = 4 To 67
                   If Left(.Cells(1, jj).Text, 2) = ke2(ky1) Then
                      If Val(Right(.Cells(1, jj).Text, 1)) = 1 Then d3(Val(Mid(.Cells(1, jj).Text, 3, 2))) = .Cells(2, jj).Text
                      d4(.Cells(2, jj).Text) = Val(Mid(.Cells(1, jj).Text, 3, 2))
                   End
                Next
                If bln2 = True Then
                   ke3 = d3.keys: Te3 = d3.Items: Cn3 = d3.Count - 1
                   For ky2 = 0 To Cn3
                       If Dir(filpth & Cn2(ky1) & "班\" & ke3(ky2) & "组【组长" & Te3(ky2) & "】\") = "" Then MkDir filpth & Cn2(ky1) & "班\" & ke3(ky2) & "组【组长" & Te3(ky2) & "】\"
                   Next
                   d3.RemoveAll
                Else
                       If Dir(filpth & Cn2(ky1) & "班\") = "" Then MkDir filpth & Cn2(ky1) & "班\"
                End If
             Next
        End If
End With
End Sub

求赐教:批量建立文件夹中出现编译问题。.rar

128.47 KB, 下载次数: 3

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-3-12 15:56 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-3-12 17:46 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
不要沉下去,过往大侠请援手一救。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-3-12 20:12 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
再求大侠救急,在线等,先谢了。

TA的精华主题

TA的得分主题

发表于 2019-3-12 20:24 | 显示全部楼层
文件夹命名规则。文件夹名不可以包含如下字符: \   /   '   ‘< > 等。自已手动命名一下包含非法字符文件夹,系统会提示那些不可用的。,

TA的精华主题

TA的得分主题

发表于 2019-3-12 20:28 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
少写了一个if
             For ky1 = 0 To Cn2
                For jj = 4 To 67
                   If Left(.Cells(1, jj).Text, 2) = ke2(ky1) Then
                      If Val(Right(.Cells(1, jj).Text, 1)) = 1 Then d3(Val(Mid(.Cells(1, jj).Text, 3, 2))) = .Cells(2, jj).Text
                      d4(.Cells(2, jj).Text) = Val(Mid(.Cells(1, jj).Text, 3, 2))
                   End  if '这里少了

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-3-13 08:25 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
maditate 发表于 2019-3-12 20:24
文件夹命名规则。文件夹名不可以包含如下字符: \   /   '   ‘< > 等。自已手动命名一下包含非法字符文件 ...

谢谢你,不过不是这个问题。而是用Mkdir创建文件夹,不能一步到位到位,而是要一步一步的创建。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-3-13 08:25 | 显示全部楼层
wzsy2_mrf 发表于 2019-3-12 20:28
少写了一个if
             For ky1 = 0 To Cn2
                For jj = 4 To 67

谢谢你,人老眼花,没检查出来。

TA的精华主题

TA的得分主题

发表于 2019-3-13 09:39 | 显示全部楼层
本帖最后由 joforn 于 2019-3-13 09:53 编辑

送你一个简单的创建目录的函数:

  1. #If VBA7 Then
  2.   Private Declare PtrSafe Function MakeDir Lib "imagehlp.dll" Alias "MakeSureDirectoryPathExists" (ByVal DirPath As String) As Long
  3. #Else
  4.   Private Declare Function MakeDir Lib "imagehlp.dll" Alias "MakeSureDirectoryPathExists" (ByVal DirPath As String) As Long
  5. #End If

  6. Sub Test()
  7.   Debug.Print MakeDir("C:\Test01\Test02\Test03\")
  8. End Sub
复制代码

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-3-16 21:17 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
joforn 发表于 2019-3-13 09:39
送你一个简单的创建目录的函数:

谢谢你。谢谢你的热心,敬佩你技术的精湛!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-25 07:12 , Processed in 0.052529 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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