ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 如何利用VBA进行文件的分发

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-10-17 18:35 | 显示全部楼层
注释中都有说明, 有几个参数可以自行调整
1, 原Excel表格中做了一个名为code的工作表, 存放代码1,2
2, xlsm源文件放在与分发库同级目录下

image.png
image.png

  1. Sub moveFile()

  2. '思路分析
  3. '原Excel表格中做了一个名为code的工作表, 存放代码1,2
  4. '假设所有需要分发的文件都已存放在 .\分发库 先手工保证文件名的有效性
  5. '只需要取文件名的前5位作为药名, 文件名的后4位的第1位是部门代码
  6. '根据情况来决定是否创建文件夹以及移动文件
  7. Dim shtCode As Worksheet
  8. Dim intRow1, intRow2, intIsMove As Integer
  9. Dim i, j, k, m, n As Integer
  10. Dim arrCode(), arrDept(), arrFile()
  11. Dim strName, strDept, strDeptPref, strDesDir, strSrcDir, strFile, strSrc, strDes As String
  12. Dim intName, intDept As Integer

  13. strDesDir = ThisWorkbook.Path
  14. strSrcDir = ThisWorkbook.Path & "\分发库"
  15. intIsMove = 1 '1为移动, 0为 复制

  16. '将代码1和代码2装入字典
  17. Set shtCode = Sheets("code")

  18. With shtCode

  19.     intRow1 = Cells(.Cells.Rows.Count, 1).End(xlUp).Row
  20.     intRow2 = Cells(.Cells.Rows.Count, 3).End(xlUp).Row
  21.    
  22.     arrCode = Range(.Cells(2, 1), .Cells(intRow1, 2))
  23.     arrDept = Range(.Cells(2, 3), .Cells(intRow2, 4))
  24.    
  25.     Set dicCode = CreateObject("scripting.dictionary")
  26.     Set dicDept = CreateObject("scripting.dictionary")
  27.    
  28.     For i = 1 To UBound(arrCode)
  29.         If Not dicCode.exists(arrCode(i, 1)) Then
  30.             dicCode(arrCode(i, 1)) = arrCode(i, 2)
  31.         Else
  32.             MsgBox "代码1名称有重复, 请检查后重试"
  33.             GoTo 100
  34.         End If
  35.    
  36.     Next
  37.    
  38.     For i = 1 To UBound(arrDept)
  39.         If Not dicDept.exists(arrCode(i, 1)) Then
  40.             dicDept(arrDept(i, 1)) = arrDept(i, 2)
  41.         Else
  42.             MsgBox "代码2名称有重复, 请检查后重试"
  43.             GoTo 100
  44.         End If
  45.    
  46.     Next

  47. End With


  48. '获取分发库的文件名称

  49. j = 0

  50. strFile = Dir(strSrcDir & "\*.*")

  51. Do While strFile <> ""
  52.     j = j + 1
  53.     ReDim Preserve arrFile(1 To j)
  54.     arrFile(j) = strFile
  55.     strFile = Dir
  56. Loop

  57. '分发文件

  58. For k = 1 To UBound(arrFile)
  59.     '获取文件名称 药名 部门
  60.     strFile = Trim(arrFile(k))
  61.     m = InStr(1, strFile, ".")
  62.     If m > 0 Then
  63.         strFile = Trim(Left(strFile, m - 1))
  64.     End If
  65.     strName = dicCode(Left(strFile, 5))
  66.     strDept = dicDept(Left(Right(strFile, 4), 1))
  67.    
  68.     If strName = "" Or strDept = "" Then
  69.         MsgBox "无法匹配的文件:" & arrFile(k)
  70.         GoTo 200
  71.     End If
  72.    
  73.     '创建目录
  74.     If Dir(strDesDir & "" & strDept, vbDirectory) = "" Then
  75.         MkDir strDesDir & "" & strDept
  76.     End If
  77.    
  78.     If Dir(strDesDir & "" & strDept & "" & strName, vbDirectory) = "" Then
  79.         MkDir strDesDir & "" & strDept & "" & strName
  80.     End If
  81.    
  82.     '移动文件
  83.    
  84.     strSrc = strSrcDir & "" & arrFile(k)
  85.     strDes = strDesDir & "" & strDept & "" & strName & ""
  86.    
  87.    
  88.     If Dir(strDes & "" & arrFile(k)) = "" Then
  89.    
  90.         Set fso = CreateObject("scripting.filesystemobject")
  91.         If intIsMove = 1 Then
  92.             fso.moveFile strSrc, strDes
  93.         Else
  94.             fso.copyFile strSrc, strDes
  95.         End If
  96.     End If
  97.    
  98. 200
  99. Next

  100. MsgBox "已完成全部文件分发"


  101. 100
  102. End Sub


复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-10-17 18:49 | 显示全部楼层
EXCEL渣渣 发表于 2019-10-17 18:32
我想知道如何入门VBA?

先了解一下常见的变量类型,基本的就可以了。比如长、短整形,长、短浮点型,字符串型,当然不指定类型就是变体型啦。如果你有点基础这直接忽律

然后了解一下组成程序化语言最基本的流程,比如 if endif ,for next,do while loop,select case end select等。同样如果你有点基础这直接忽律

接下来就是解题思路啦,这需要实战。于是最重要的一步来啦:来这义务敲100段代码,,,

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-10-17 19:24 | 显示全部楼层
一把小刀闯天下 发表于 2019-10-17 18:49
先了解一下常见的变量类型,基本的就可以了。比如长、短整形,长、短浮点型,字符串型,当然不指定类型就 ...

有书,视频推荐吗?
你说的名词我都有听过,但是就是不会用

TA的精华主题

TA的得分主题

发表于 2019-10-17 19:35 | 显示全部楼层
EXCEL渣渣 发表于 2019-10-17 19:24
有书,视频推荐吗?
你说的名词我都有听过,但是就是不会用

觉得你还是有点基础的。VBA的书我没有看过,网上下点基本的资料就可以啦,我并不清楚是不是有VBA视频的。

不同语言解决问题的思路都是相通的,而且VBA学起来应该是比较简单的吧。

于是从现在开始敲代码吧,当然还是100段,,,

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-10-17 19:37 | 显示全部楼层
johnchen55 发表于 2019-10-17 18:35
注释中都有说明, 有几个参数可以自行调整
1, 原Excel表格中做了一个名为code的工作表, 存放代码1,2
2, xl ...

论坛还是有好多老师啊,谢谢你热心帮助,我的工作可以减轻不少了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-10-17 19:41 | 显示全部楼层
一把小刀闯天下 发表于 2019-10-17 19:35
觉得你还是有点基础的。VBA的书我没有看过,网上下点基本的资料就可以啦,我并不清楚是不是有VBA视频的。 ...

当程序员是我的梦想,但是却选择了药学,而我的妹妹却成一计算机博士,呵呵。天意弄人啊

TA的精华主题

TA的得分主题

发表于 2019-10-17 19:53 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
EXCEL渣渣 发表于 2019-10-17 19:41
当程序员是我的梦想,但是却选择了药学,而我的妹妹却成一计算机博士,呵呵。天意弄人啊

基因放在这儿,稍微用点力就可以敲出很不错的VBA代码的。代码可以敲错,但这个药用错了那是无法重来的。

-----------------------
“代码”与“药品名称”对应关系是行业规定还是你们自己定的规则的,,,

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-10-17 19:59 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
一把小刀闯天下 发表于 2019-10-17 19:53
基因放在这儿,稍微用点力就可以敲出很不错的VBA代码的。代码可以敲错,但这个药用错了那是无法重来的。
...

内部规定的,好系统化管理。

TA的精华主题

TA的得分主题

发表于 2019-10-17 20:01 | 显示全部楼层
EXCEL渣渣 发表于 2019-10-17 19:59
内部规定的,好系统化管理。

嗯,不具备通用性,只是了解一下而已,非常感谢。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-10-17 20:04 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
一把小刀闯天下 发表于 2019-10-17 20:01
嗯,不具备通用性,只是了解一下而已,非常感谢。

放心,病人生命所托,岂敢儿戏。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

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

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

GMT+8, 2024-4-24 20:35 , Processed in 0.048214 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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