楼主 开心二点 |
来试试VBS吧,不需要封装成.dll、.exe也不用做成麻烦的加载宏,却能脱离宿主excel单独运行的VBA。你只要把代码稍作修改,粘贴入.txt文件里面保存,然后将扩展名更改为.vbs,嘿嘿,运行吧!相信你会喜欢的。 写一个汇总工作簿的放上来方便查阅。本例本来想调用对话框呢,但是注册组件的时候出了点问题,就当成是大家交流的问题吧。抛砖引玉下。 数据源因为涉及一些敏感性问题,因此没有放上来,只放了代码,相信这个是基本不会影响大家接触VBS的。- Dim oxl, findfile, wb, i
- Dim ofile,j, shs, wb1, wb2, dfile, dfolder, nc, arr(),inp1,inp2
- Set oxl = CreateObject("excel.application")
- Set findfile = CreateObject("scripting.filesystemobject")
- 'oxl.Visible = True '显示应用程序
- With findfile
- inp1= oxl.inputbox("请输入需要创建的汇总工作簿的全名" & chr(10) & "格式建议是*.xlsx","创建提示","D:\汇总.xlsx",,,,1)
- If Not .fileexists(inp1) Then
- Set wb = oxl.Workbooks.Add '新建工作簿
- With wb
- oxl.DisplayAlerts = False
- For i = .Sheets.Count To 1 Step -1 '工作表改名,删除没用的工作表
- If .Sheets(i).Name = "Sheet1" Then
- .Sheets(i).Name = "在职人员汇总表"
- Else
- .Sheets(i).Delete
- End If
- Next
- .SaveAs inp1 '将新建的工作簿另存到D:\
- oxl.DisplayAlerts = True
- End With
- End If
- End With
- Set wb2 = oxl.Workbooks.Open(inp1) '打开汇总工作簿
- set dfolder = createobject("scripting.filesystemobject")
- inp2 = oxl.inputbox("请输入需要查找的文件夹路径" & chr(13) & "路径不能以“\”结尾","查找提示","D:\花名册0801",,,,1)
- for each dfile in dfolder.getfolder(inp2).files
- nc = nc + 1
- redim preserve arr(nc)
- arr(nc) = inp2 & "\" & dfile.name
- next
- set dfolder = nothing
- set dfile = nothing
- For j = 1 To nc '逐个打开选过的工作簿
- Set wb1 = oxl.Workbooks.Open(arr(j))
- With wb1
- For shs = 1 To .Sheets.Count
- If instr(.sheets(shs).name,"花名册") > 0 and instr(.sheets(shs).name,"离职") = 0 Then '工作表的表名包含花名册且不包含离职
- .Sheets(shs).range("a1").CurrentRegion.Copy '复制A1单元格的当前区域
- With wb2.Sheets("在职人员汇总表")
- .range("a65536").End(3).Offset(1, 0).value = wb1.Name '写入被粘贴工作簿的名称
- .range("a65536").End(3).Offset(1, 0).value = wb1.Sheets(shs).Name '写入被粘贴工作表的名称
- .Paste .range("a65536").End(3).Offset(1, 0) '粘贴
- wb2.Save '保存汇总工作簿
- oxl.CutCopyMode = False '取消粘贴模式
- wb1.Activate '选中被粘贴工作簿
- End With
- End If
- Next
- wb1.Close '关闭被粘贴工作簿
- End With
- Next
- wb2.Close
- oxl.Quit
- Set oxl = Nothing
- MsgBox "粘贴完毕" '提示粘贴完毕
测试.zip |
6楼 su0nils000 |
vbs好是好,但有两个很大的问题,一个是没有好的调试环境,远不如vba的IDE,虽然有个vbsedit,但基本都是盗版的,调试起来也不太靠谱,第二,它的语言实在是太弱了,不支持api,不支持汉字变量,不支持类型,另外从vba要移植过去还是要费些手脚的,很多函数不能用,比如format,另外vbs的sleep在vba中也是没有对应的.. |