ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的酷贴 > Excel VBA > 不封装的VBA代码----VBS

不封装的VBA代码----VBS

作者:绿色风 分类: 时间:2022-08-18 浏览:116
楼主
开心二点
来试试VBS吧,不需要封装成.dll、.exe也不用做成麻烦的加载宏,却能脱离宿主excel单独运行的VBA。你只要把代码稍作修改,粘贴入.txt文件里面保存,然后将扩展名更改为.vbs,嘿嘿,运行吧!相信你会喜欢的。
写一个汇总工作簿的放上来方便查阅。本例本来想调用对话框呢,但是注册组件的时候出了点问题,就当成是大家交流的问题吧。抛砖引玉下。
数据源因为涉及一些敏感性问题,因此没有放上来,只放了代码,相信这个是基本不会影响大家接触VBS的。
  1. Dim oxl, findfile, wb, i
  2. Dim ofile,j, shs, wb1, wb2, dfile, dfolder, nc, arr(),inp1,inp2
  3. Set oxl = CreateObject("excel.application")
  4. Set findfile = CreateObject("scripting.filesystemobject")
  5. 'oxl.Visible = True  '显示应用程序
  6. With findfile
  7. inp1= oxl.inputbox("请输入需要创建的汇总工作簿的全名" & chr(10) & "格式建议是*.xlsx","创建提示","D:\汇总.xlsx",,,,1)
  8. If Not .fileexists(inp1) Then
  9. Set wb = oxl.Workbooks.Add  '新建工作簿
  10. With wb
  11. oxl.DisplayAlerts = False
  12. For i = .Sheets.Count To 1 Step -1  '工作表改名,删除没用的工作表
  13. If .Sheets(i).Name = "Sheet1" Then
  14. .Sheets(i).Name = "在职人员汇总表"
  15. Else
  16. .Sheets(i).Delete
  17. End If
  18. Next
  19. .SaveAs inp1  '将新建的工作簿另存到D:\
  20. oxl.DisplayAlerts = True
  21. End With
  22. End If
  23. End With
  24. Set wb2 = oxl.Workbooks.Open(inp1)    '打开汇总工作簿
  25. set dfolder = createobject("scripting.filesystemobject")
  26. inp2 = oxl.inputbox("请输入需要查找的文件夹路径" & chr(13) & "路径不能以“\”结尾","查找提示","D:\花名册0801",,,,1)
  27. for each dfile in dfolder.getfolder(inp2).files
  28. nc = nc + 1
  29. redim preserve arr(nc)
  30. arr(nc) = inp2 & "\" & dfile.name
  31. next
  32. set dfolder = nothing
  33. set dfile = nothing
  34. For j = 1 To nc    '逐个打开选过的工作簿
  35. Set wb1 = oxl.Workbooks.Open(arr(j))
  36. With wb1
  37. For shs = 1 To .Sheets.Count
  38. If instr(.sheets(shs).name,"花名册") > 0 and instr(.sheets(shs).name,"离职") = 0 Then    '工作表的表名包含花名册且不包含离职
  39. .Sheets(shs).range("a1").CurrentRegion.Copy    '复制A1单元格的当前区域
  40. With wb2.Sheets("在职人员汇总表")
  41. .range("a65536").End(3).Offset(1, 0).value = wb1.Name    '写入被粘贴工作簿的名称
  42. .range("a65536").End(3).Offset(1, 0).value = wb1.Sheets(shs).Name    '写入被粘贴工作表的名称
  43. .Paste .range("a65536").End(3).Offset(1, 0)    '粘贴
  44. wb2.Save    '保存汇总工作簿
  45. oxl.CutCopyMode = False   '取消粘贴模式
  46. wb1.Activate    '选中被粘贴工作簿
  47. End With
  48. End If
  49. Next
  50. wb1.Close    '关闭被粘贴工作簿
  51. End With
  52. Next
  53. wb2.Close
  54. oxl.Quit
  55. Set oxl = Nothing
  56. MsgBox "粘贴完毕"    '提示粘贴完毕

测试.zip
2楼
yjzstar
二点V5啊
3楼
开心二点
代码冗余了一些,个别地方也有一些问题,懒的改了,就当是学习的过程,存储的地方吧,发上来下次用的时候来复制粘贴
4楼
danysy
是值得好好研究一下了
5楼
天空真蓝/qt
实效接触。
6楼
su0nils000
vbs好是好,但有两个很大的问题,一个是没有好的调试环境,远不如vba的IDE,虽然有个vbsedit,但基本都是盗版的,调试起来也不太靠谱,第二,它的语言实在是太弱了,不支持api,不支持汉字变量,不支持类型,另外从vba要移植过去还是要费些手脚的,很多函数不能用,比如format,另外vbs的sleep在vba中也是没有对应的..
7楼
zdl
又学到了一些
8楼
King_Tree
用起来应该是很方便!
9楼
335081548
谢谢分享

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap